原来项目中都是自己拿到 mail.jar 和 activation.jar 两个包编写发送Email的代码,虽然不难,但也有些麻烦。
现在好了,在 apache 站点有一个 jarkata/commons/email 子项目,也为我们实现了发送 Email 的功能,在 http://jakarta.apache.org/commons/email/ 把包 commons-email-1.0.jar 下来,自己要写的代码就十分少了,并且非常明了。
这个包的大小只有23K,也就是9个类而已,却能让您省不少事。
commons-email 提供了 SimpleEmail、MultiPartEmail、HtmlEmail、EmailAttachment 等类,只需要您按正常思维简单的写几行代码就能发各种类型的 Email,一般我们用 JavaMail 发送 Email 会碰到中文乱码问题,主要是出现在把代码放在英文系统中执行时,处理方法是主题和内容使用 GBK 或 UTF-8 字符集。
在 http://jakarta.apache.org/commons/email/userguide.html 有 commons-email 的使用示例,如果直接用第一个例子放在英文环境中发送带中文主题或内容的邮件也会出现乱码,
这里对第一个例子稍做改造,可以让发出的 Email 中文不出现乱码,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
package com.unmi; import org.apache.commons.mail.SimpleEmail; public class MailTo { /** * @Author Unmi * @param args * @throws Exception */ public static void main(String[] args) throws Exception { //发送简单邮件 SimpleEmail email = new SimpleEmail(); email.setHostName("mail.2911.net"); //需要邮件发送服务器验证,用户名/密码 email.setAuthentication("broodwar", "xxxxxx"); email.addTo("<a href="mailto:fantasia@sina.com">fantasia@sina.com</a>", "fantasia"); email.setFrom("<a href="mailto:broodwar@2911.net">broodwar@2911.net</a>", "Broodwar"); //设置主题的字符集为UTF-8 email.setCharset("UTF-8"); email.setSubject("测试邮件主题"); email.buildMimeMessage(); //设置内容的字符集为UTF-8,先buildMimeMessage才能设置内容文本 email.getMimeMessage().setText("测试邮件内容","UTF-8"); email.sendMimeMessage(); } } |
以后在 Java 中发邮件就用这个 commons-email 组件就好了,如果要发送 HTML 邮件或者带附件的邮件就学着 http://jakarta.apache.org/commons/email/userguide.html 中的例子做即可,出现中文乱码,跟到源代码中想想办法自己动动脑。
本文链接 https://yanbin.blog/apache-commons-email-send-mail/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
try {
mailSender.send(new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage)
throws MessagingException {
MimeMessageHelper message = new MimeMessageHelper(
mimeMessage, true, "UTF-8");
try {
message.setFrom("broodwar@2911.net", "XXX测试系统");
message.setTo(new InternetAddress("fantasia@sina.com",
"Unmi"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
message.setSubject("邮件主题");
message.setText("邮件内容", true);
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
用Spring来发这种邮件其实很麻烦的。要指定发送人的显示名称,接收人的显示名称,字符集等。
// 发送带附件及HTML内容的邮件
HtmlEmail email = new HtmlEmail();
email.setHostName("mail.2911.net");
// 需要邮件发送服务器验证,用户名/密码
email.setAuthentication("broodwar", "xxxxxx");
email.addTo("qiuyb@tcl.com", "Unmi");
email.setFrom("broodwar@2911.net", "Broodwar");
// 设置主题的字符集为UTF-8
email.setCharset("UTF-8");
email.setSubject("测试邮件主题");
email.setHtmlMsg("<H1>测试邮件内容</H1>");
email.attach(new URL("file:///c|SendMail.java"), "SendMail.java",
"SendMail.java");
email.buildMimeMessage();
email.sendMimeMessage();
}