您應該使用setSubject(String subject, String charset)這是一個方便的功能用於此目的。
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]);
在MimeUtility據說:
有一組方法來編碼和根據RFC 2047。注意,在一般情況下,不使用方法時需要這些方法解碼MIME頭如setSubject和setRecipients;當使用這些「更高級別」的方法時,JavaMail將自動編碼和解碼數據。以下方法僅在使用setHeader和getHeader方法制作原始MIME頭時需要。
從我的角度來看,Message.setSubject
應該是此目的的切入點。
您的主題編碼中的cp1252
顯示出來,因爲它是您平臺上的標準編碼。
您發佈的例子是
的 「結果」
mail.setSubject(MimeUtility.encodeText(subject, "cp1252", "Q"));`
我的MimeMessage沒有setSubject(String,String)有趣。也許我正在使用舊版本的Javamail。不管怎麼說,還是要謝謝你。 – 2010-08-11 09:58:00
這肯定是一個非常古老的javamail,因爲即使在1999年的[MimeMessage in Version 1.1] [1]中也有它。 ;-) [1]:https://www.cs.auckland.ac.nz/references/java/javamail/javax/mail/internet/MimeMessage.html – 2010-08-11 18:00:14
消息不包含setSubject(String,String)而MimeMessage的確如此。 – 2014-03-05 17:13:30