我正在使用 Javamail (javax.mail) 发送邮件。我成功地将邮件内容调整为utf-8。但是我无法将主题行设置为 utf-8 编码字符串。
我什至尝试过
mail.setSubject(new String(subject.getBytes("utf-8"), "utf-8"));
但它仍然以 Cp1252 的形式发送。下面给出了邮件标头示例:
有任何想法吗?
(source: friendfeed-media.com http://m.friendfeed-media.com/a328a80db12f3c17a8aed06be106045354355abf)
你应该使用setSubject(字符串主题,字符串字符集) http://java.sun.com/products/javamail/javadocs/javax/mail/internet/MimeMessage.html#setSubject%28java.lang.String,%20java.lang.String%29这是用于此目的的一个方便的功能。
Session session=Session.getDefaultInstance(new Properties());
MimeMessage mimeMsg= new MimeMessage(session);
String subject="Herr Müller reist nach \u0141\u00f3d\u017a.";
mimeMsg.setSubject(subject,"utf-8");
System.out.println(subject);
System.out.println(mimeMsg.getHeader("Subject")[0]);
In Mime实用程序 http://java.sun.com/products/javamail/javadocs/javax/mail/internet/MimeUtility.html据说:
根据 RFC 2047,有一组方法可以对 MIME 标头进行编码和解码。请注意,一般来说,在使用 setSubject 和 setRecipients 等方法时不需要这些方法;当使用这些“更高级别”的方法时,JavaMail 将自动编码和解码数据。仅当使用 setHeader 和 getHeader 方法操作原始 MIME 标头时才需要以下方法。
从我的观点,Message.setSubject
应该是此目的的切入点。
The cp1252
在您的主题编码中显示,因为它是您平台上的标准编码。
您发布的示例是“结果”
mail.setSubject(MimeUtility.encodeText(subject, "cp1252", "Q"));`
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)