前言
最近在学习大名鼎鼎的Apache的commons包,发现一个好玩的Email工具包,该包对java mail进行了更好的封装,比原生的降低了复杂度。
开始
先上一段代码:
//用commons email发送邮件 @Test public void testEmail() throws EmailException { Email email = new SimpleEmail(); email.setHostName("smtp.qq.com"); email.setSmtpPort(465); email.setAuthenticator(new DefaultAuthenticator("54****701@qq.com", "dyp*****utbaja")); email.setSSL(true); email.setFrom("54****701@qq.com"); email.setSubject("TestMail"); email.setMsg("This is a test mail ... :-)"); email.addTo("97****375@qq.com"); email.send(); }
该段代码的意思大概是从54开头的qq邮箱发送到97开头的邮箱中,其中需要注意的有几点:
1、email.setAuthentication这个方法,第一个参数是你邮箱的账号,第二个参数并非你邮箱的登录密码,而是邮箱的授权码,qq邮箱的授权码怎么获取能,首先在下面页面找到 生成授权码的位置:
点击后会提示你发送短信到指点的号码:
如果腾讯已经收到短信,就会生成一个授权码:
2、email.setAuthentication这个方法,第一个参数是你邮箱的账号必须和email.setFrom()中的账号一直,否则也会报错。
主要的两点设置完后,运行代码会在97的邮箱中收到邮件,如下图:
ok,事情就是这么简单,有没有感觉比原生的好用多了
扩展
其实我们邮件的内容是通过email.setMsg来写的,当然你可以先通过stringBuffer先把文字写到buffer里面,然后再一次性写入,出了这个Apache还提供了,另外两个接口,用于发送附件和html格式的正文。
MultiPartEmail
继承Email,多了一个添加附件的方法:
attach(URL, String, String)
attach(URL, String, String, String)
attach(DataSource, String, String)
attach(DataSource, String, String, String)
attach(EmailAttachment)
HtmlEmail
继承MultiPartEmail,与SimpleEmail相比,多了一个setHtmlMsg(String msg)方法,用户设置html格式内容,调用方式同SimpleEmail几乎一致
HtmlEmail email = new HtmlEmail();
email.setSSL(true);
email.setSmtpPort(SMTP_PORT);
email.setHostName(SMTP_SERVER);
email.setAuthentication(USER_NAME, PASSWORD);
email.addTo("**@**.com");
email.setFrom("**@**.com");
email.setSubject("subject");
email.setCharset("GBK");
email.setHtmlMsg("<html><body><b>this is email message!</body></html>");
email.send();
上面提供的接口加上前面的simpleEmail基本上可以满足我们对系统发送邮件的需求。
附录
Email主要的API:
setHostName(String):设置smtp服务器地址
setSmtpPort(int):设置smtp服务器端
setAuthenticator(Authenticator):设置授权帐号和密码
setSSL(boolean ssl):是否采用ssl方式连接服务
setMailSession(Session):设置与服务器连接session
setCharset(String):设置邮件主体编码
setFrom(String):设置发件人地址
addTo(String):添加收件人地址
addCc(String):添加抄送人地址
addBcc(String):添加密送人地址
addReplyTo(String):添加回复人地址
setSubject(String):设置邮件标题
setMsg(String):设置邮件主体