狂奔 lion

自强不息

Apache commons-Email中文问题的解决办法

Apache commons-email是对javamailAPI的一层封装,经封装后的发送邮件的代码变得极为简单,但这里有一个中文支持的小问题。
commons-email主要的封装类是Email类,这是一个抽象类,该框架给出了SimpleEmail的默认实现,但该实现并不支持中文,即使调用Email的setCharset也不起作用。
事实上,SimpleEmail调用了Email超类中的setContent方法来设置邮件内容(通过setMsg方法),而在设置内容时,又采用了默认的英文字符集,我们只要在代码中直接调用email类的setContent方法就可以支持中文了,但要注意setContent具备两个参数,第一个是内容对象,第二个则是内容类型,我们把第二个参数设置为:
SimpleEmail.TEXT_PLAIN + "; charset=utf-8", 即可。理由如下面源代码所示:
    public void setContent(Object aObject, String aContentType)
    {
          ......
            // set the charset if the input was properly formed
            String strMarker = "; charset=";
            int charsetPos = aContentType.toLowerCase().indexOf(strMarker);

            if (charsetPos != -1)
            {
                // find the next space (after the marker)
                charsetPos += strMarker.length();
                int intCharsetEnd =
                    aContentType.toLowerCase().indexOf(" ", charsetPos);

                if (intCharsetEnd != -1)
                {
                    this.charset =
                        aContentType.substring(charsetPos, intCharsetEnd);
                }
                else
                {
                    this.charset = aContentType.substring(charsetPos);
                }
            }
        }
    }
    即有一个文本解析的过程。


 @2008 杨一. 版权所有. 保留所有权利

posted on 2006-08-01 20:14 杨一 阅读(961) 评论(2)  编辑  收藏 所属分类: Java EE

评论

# re: Apache commons-Email中文问题的解决办法 2007-07-13 19:29 chaoyy@gmail.com

不好意思,按照上述方法,中文问题依然没解决。
multiEmail.setContent(body, SimpleEmail.TEXT_PLAIN + "; charset=utf-8");
是不是不止这一个地方需要改?  回复  更多评论   

# re: Apache commons-Email中文问题的解决办法 2007-12-06 12:41 隔叶黄莺

我也有研究过 用 apache commons-email 轻松发送无乱码邮件
http://www.blogjava.net/Unmi/archive/2006/12/07/124065.html

其中有发简单邮件,以及后面我加评论补充了发HTML邮件及带附件的发送  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2006年8月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

公告

本人在blogjava上发表的文章及随笔除特别声明外均为原创或翻译,作品受知识产权法保护并被授权遵从 知识分享协议:署名-非商业性使用-相同方式共享 欢迎转载,请在转载时注明作者姓名(杨一)及出处(www.blogjava.net/yangyi)
/////////////////////////////////////////
我的访问者

常用链接

留言簿(5)

随笔分类(55)

随笔档案(55)

相册

Java

其他技术

生活

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

自强不息


用心 - 珍惜时间,勇于创造