博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
邮箱工具(尚未完成)的几个组件类
阅读量:6172 次
发布时间:2019-06-21

本文共 9280 字,大约阅读时间需要 30 分钟。

在使用公用电脑又没有带 u 盘的情况下,如果在网上找到了一些有用的链接需要转存起来,该怎么办呢?

一、Delicious 是一个解决方案,不过那个东西我不经常用,老是忘记账号密码(如果是常用邮箱的话,那就是滚瓜烂熟了)。

二、qq 邮箱的邮件草稿箱(有一个保存草稿的功能)

三、qq 空间的留言板

。。。。

不过我感觉都不是很好,我想到了一种自动化比较高的方案:

写一个工具上传到 csdn 的资源。

以后每次在公用电脑有需求的时候就将这个工具下载到本地。

这个工具主要包含了如下的功能:

能够解析拽入的链接的网页标题,然后,以一种特定的格式组织好发送到指定的邮箱。

然后,在自己的本地机器,写一个工具能够自动从指定邮箱里面抓出新增的链接 数据,

然后保存为特定的数据文件(比如说按日期分类的一个 html 文件,类似 chrome 导出 书签html)。

这样的话就形成了一个良好的循环,将所有零散的连接数据从其他公用电脑上面转移到了自己的本地机器中。

用邮箱的话也有一些弊端,比如:

邮件服务器一般都设置了垃圾邮件拦截,这样的话,发送邮件的频率就不能太高,不然发送失败的话数据就不安全了。

可以采用 “生产者-消费者” 的模式搞一个队列,或者是把单元数据累积起来,设置一个最低得发送间隔,

比如说下一封邮件的发送时间必须超过上次发送时间 10秒+,然后一次性把累积起来的数据发送到邮箱。

下面是我最近写的几个组件类(现在已经习惯性的往可重用性这方面靠了,篇幅短,结构简单,个人感觉重用性还是不错的)

EmailAddressUtil.java

 

package org.bruce.mail.tool.v2;import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * @author yang3wei * 检查邮箱地址是否有效~ */public class EmailAddressUtil {	public static final String REGULAR_EXPRESSION = 			"^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";	/**	 * 检查邮箱地址是否有效~	 * @param strAddr	 * @return	 */	public static boolean validate(String strAddr) {		boolean bRetVal = false;		Pattern pattern = Pattern.compile(REGULAR_EXPRESSION);		Matcher matcher = pattern.matcher(strAddr);		bRetVal = matcher.matches();		return bRetVal;	}		/**	 * 根据邮箱地址解析出邮箱主机的域名~	 * @param strAddr	 * @return	 */	public static String getHostDomain(String strAddr) {		int index = strAddr.indexOf('@');		String strHostDomain = strAddr.substring(index + 1);		return strHostDomain;	}	/**	 * 测试~	 * @param args	 */	public static void main(String[] args) {		// TODO Auto-generated method stub				List
addrList = new ArrayList
(); addrList.add("123456@qq.com"); addrList.add("abcdefg@yeah.net"); addrList.add("dfewfew@tom.com"); addrList.add("dfewfew@263.com"); addrList.add("asdfaf.dasd@das"); addrList.add("asdfas@dfasdf"); addrList.add("asdfasd.sdfwwefw"); for (String strAddr : addrList) { boolean bRetVal = validate(strAddr); String yesOrNot = bRetVal ? " 是" : " 不是"; System.out.println(strAddr + yesOrNot + "一个有效的邮箱地址"); if (bRetVal) { System.out.println(strAddr + "的域名为:" + getHostDomain(strAddr)); } System.out.println(); } }}

ValidateUtil.java

 

 

package org.bruce.mail.tool.v2;import java.util.Properties;import javax.mail.Session;import javax.mail.Transport;/** * @author yang3wei * 用来验证账号密码是否正确~ */public class ValidateUtil {		/**	 * @param usr	 * @param pwd	 * @return	 */	public static boolean validate(String usr, String pwd, String host) {		boolean bRetVal = false;				if (usr != null && EmailAddressUtil.validate(usr)) {						Properties props = new Properties();			props.put("mail.smtp.host", host);			props.put("mail.smtp.auth", "true");						try {				Session session = Session.getDefaultInstance(props, null);				Transport transport = session.getTransport("smtp");				transport.connect(host, usr, pwd);				bRetVal = transport.isConnected();				transport.close();			} catch (Exception e) {				System.err.println("Authenticate failed!");			}		}				return bRetVal;	}	/**	 * @param args	 */	public static void main(String[] args) {		// TODO Auto-generated method stub		boolean bRetVal = validate("12345@yeah.net", "12345", "smtp.yeah.net");		System.out.println(bRetVal ? "验证通过" : "验证失败");	}}

 

Account.java

 

package org.bruce.mail.tool.v2;/** * @author yang3wei * */public class Account {		private String usr;	private String pwd;	private String host;	public Account() {		// TODO Auto-generated constructor stub	}		public Account(String usr, String pwd, String host) {		this.usr = usr;		this.pwd = pwd;		this.host = host;	}		public String getHost() {		return host;	}	public void setHost(String host) {		this.host = host;	}	public String getUsr() {		return usr;	}	public void setUsr(String usr) {		this.usr = usr;	}	public String getPwd() {		return pwd;	}	public void setPwd(String pwd) {		this.pwd = pwd;	}}

 

AccountMgr.java

 

package org.bruce.mail.tool.v2;import javax.swing.JOptionPane;import javax.swing.JPasswordField;import javax.swing.JTextField;/** * @author yang3wei *  * 这里对用户名以及密码做把关。 * 在获取到正确的用户名、密码之后, * 就会将其记录到 username,password 成员变量~ */public class AccountMgr {		/**	 * Max login times	 */	public static final int MAX_LOGIN_TIMES = 3;		private static AccountMgr aMgr = null;	private boolean available = false;	private Account account = new Account();	public static AccountMgr sharedInstance() {		if (aMgr == null) {			aMgr = new AccountMgr();		}		return aMgr;	}		private AccountMgr() {		int times = 0;		String strTip = "请输入邮箱密码";				while (!available) {						JTextField jtf_userName = new JTextField();			/**			 * http://bbs.csdn.net/topics/120044533			 * 如果能让对话框弹出时密码框自动获取焦点就更好了(手动按下 tab 键就行了)~			 * 让密码框自动获取焦点比较麻烦,要重写一个东西,还要加上阻塞的逻辑~			 */			JPasswordField jpf_pwd = new JPasswordField();			Object[] comps = {"邮箱账号", jtf_userName, "邮箱密码", jpf_pwd};			int iRetVal = JOptionPane.showConfirmDialog(null, comps, strTip, JOptionPane.OK_CANCEL_OPTION);			// 关闭 = -1,取消 = 2;确定 = 0			if (iRetVal == -1 || iRetVal == 2) {				// “取消” 或 “关闭” 将进入到这里~				System.exit(-1);			}						String strUsr = jtf_userName.getText();			String strPwd = String.valueOf(jpf_pwd.getPassword());			String strHost = null;						if (strUsr == null || strUsr.equals("") || strPwd == null || strPwd.equals("")) {				// 密码框里面什么都没有就按确定的话,就不做验证了,免得浪费时间(验证很耗时)~				available = false;							} else {				strHost = "smtp." +  EmailAddressUtil.getHostDomain(strUsr);				available = ValidateUtil.validate(strUsr, strPwd, strHost);			}						if (available) {				account.setUsr(strUsr);				account.setPwd(strPwd);				account.setHost(strHost);				JOptionPane.showMessageDialog(null, "验证通过");							} else {				times ++;				int count = MAX_LOGIN_TIMES - times;				if (count > 1) {					strTip = "验证失败,还能尝试" + count + "次";				} else if (count == 1) {					strTip = "验证失败,再失败1次后退出!";				} else {					System.exit(-1);				}			}		}	}		// getters && setters	public Account getAccount() {		return account;	}	public void setAccount(Account account) {		this.account = account;	}		/**	 * @param args	 */	public static void main(String[] args) {		AccountMgr.sharedInstance();	}}

EmailSender.java

 

 

package org.bruce.mail.tool.v2;import java.util.Date;import java.util.Properties;import java.util.Random;import javax.mail.Message;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;/** * @author yang3wei */public class EmailSender {	/**	 * @param content	 */	public static void send(String content) {				AccountMgr aMgr = AccountMgr.sharedInstance();		String strUsr = aMgr.getAccount().getUsr();		String strPwd = aMgr.getAccount().getPwd();		String strHost = aMgr.getAccount().getHost();				Properties props = new Properties();		props.put("mail.smtp.host", strHost);		props.put("mail.smtp.auth", "true");		Session session = Session.getInstance(props, null);				InternetAddress fromNetAddr = null;		InternetAddress[] toNetAddr = new InternetAddress[1];				try {			fromNetAddr = new InternetAddress(strUsr);			toNetAddr[0] = new InternetAddress(strUsr);			MimeMessage msg = new MimeMessage(session);			msg.setFrom(fromNetAddr);			msg.setRecipients(Message.RecipientType.TO, toNetAddr);			msg.setSubject("subject" + new Random().nextInt());			msg.setSentDate(new Date());			msg.setText(content);			msg.saveChanges();						Transport transport = session.getTransport("smtp");			transport.connect(strHost, strUsr, strPwd);			transport.sendMessage(msg, msg.getAllRecipients());			transport.close();		} catch (Exception e) {			e.printStackTrace();		}	}		/**	 * @param args	 */	public static void main(String[] args) {		for (int i = 0; i < 5; i ++) {			send("Nice to meet you! -" + i);			System.out.println("Send an e-mail successfully!");			try {				Thread.sleep(5000);			} catch (InterruptedException e) {				e.printStackTrace();			}		}	}}

HtimParser.java

 

 

package org.bruce.mail.tool.v2;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;/** * @author yang3wei * jsoup 用例 */public class HtmlParser {		public static final String USER_AGENT = 			"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31";		/**	 * 获取页面标题~	 * @param url	 * @return	 */	public static String getTitle(String url) {		String title = "get_title_failed";		Document doc = null;		try {			// 从 URL 直接加载 HTML 文档			doc = Jsoup.connect(url).userAgent(USER_AGENT).get();			title = doc.title();		} catch (IOException e) {			e.printStackTrace();		}		return title;	}	/**	 * @param args	 */	public static void main(String[] args) {		List
listUrl = new ArrayList
(); listUrl.add("http://my.oschina.net/bigyuan/blog/98115");// 开源中国 listUrl.add("http://blog.csdn.net/yang3wei/article/details/8577741");//csdn博客 listUrl.add("http://blog.sina.com.cn/s/blog_6084f5880101801i.html");//新浪博客 listUrl.add("http://fangxin.blog.51cto.com/1125131/735178");//51博客 listUrl.add("http://hi.baidu.com/baby_66_/item/a2a7f125598f79daa5275af2");//百度空间 listUrl.add("http://scholers.iteye.com/blog/728377");//iteye for (int i = 0; i < listUrl.size(); i ++) { String title = getTitle(listUrl.get(i)); System.out.println(title); } }}

 

 

你可能感兴趣的文章
Inno Setup入门(二十)——Inno Setup类参考(6)
查看>>
图片自适应
查看>>
amd cmd
查看>>
Linux下的uml画图工具
查看>>
xml返回数组数据
查看>>
约瑟夫问题总结
查看>>
spring mybatis 批量插入返回主键
查看>>
指针函数小用
查看>>
开源力量公开课第二十三期-从SVN到Git,次时代代码管理
查看>>
输入挂
查看>>
升级迁移前,存储过程统计各个用户下表的数据量,和迁移后的比对
查看>>
sql注入分类
查看>>
初识CSS选择器版本4
查看>>
[Hadoop in China 2011] 朱会灿:探析腾讯Typhoon云计算平台
查看>>
JavaScript之数组学习
查看>>
PHP 设置响应头来解决跨域问题
查看>>
CAS实现SSO单点登录原理
查看>>
博客园美化专用图片链接
查看>>
HDU_1969_二分
查看>>
高等代数葵花宝典—白皮书
查看>>