关于JavaMail中发送中文附件标题乱码的说明

作者:袖梨 2022-07-02
以前在CSDN上发过一篇帖子说可能是一个BUG, 本想直接回复那个帖子, 可能由于 CSDN的改版? 那篇帖子我现在无法回复, 只能在这里做一个说明了.
收到SUN工程师的回复, 给了我一个相应的FAQ链接, 实在抱歉当时没有去查询FAQ:-)
http://java.sun.com/products/javamail/FAQ.html#encodefilename
原因是在MIME的相应规范中(RFC2047等)说明了附件标题必须是US-ASCII字符, 所以在发送中文标题的附件时需要编码成US-ASCII字符, 有两种编码方式: B (BASE64), Q (Quoted-Printable), 这些方法在MimeUtility里都已经做了封装, 所以在发送附件时使用方法:
setFileName(MimeUtility.encodeText(fileName, "GBK"));
不过现在邮件系统对此处实现的不是很一致, 所以可能有个别邮件系统收到的是乱码, 可根据情况自己选择相应的编码方式.
如以前提过的直接取ISO8859-1的字节:setFileName(new String(file.getName().getBytes(), "ISO8859-1"));

相关文章

精彩推荐