用 apache commons-email 轻松发送无乱码邮件

原来项目中都是自己拿到 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 中文不出现乱码,如下:

以后在 Java 中发邮件就用这个 commons-email 组件就好了,如果要发送 HTML 邮件或者带附件的邮件就学着 http://jakarta.apache.org/commons/email/userguide.html 中的例子做即可,出现中文乱码,跟到源代码中想想办法自己动动脑。

本文链接 https://yanbin.blog/apache-commons-email-send-mail/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

2 Comments
Inline Feedbacks
View all comments
隔叶黄莺
17 years ago
JavaMailSender mailSender = (JavaMailSender) getBean("mailSender");
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来发这种邮件其实很麻烦的。要指定发送人的显示名称,接收人的显示名称,字符集等。

隔叶黄莺
17 years ago

 

    public void send() throws Exception {
        
// 发送带附件及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();
    }