您应该使用 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"));`