代码之家  ›  专栏  ›  技术社区  ›  ahmet alp balkan

Javamail更改主题行的字符集

  •  10
  • ahmet alp balkan  · 技术社区  · 14 年前

    我甚至试过了

    mail.setSubject(new String(subject.getBytes("utf-8"), "utf-8"));
    

    有什么想法吗?

    example from mail headers http://m.friendfeed-media.com/a328a80db12f3c17a8aed06be106045354355abf

    4 回复  |  直到 14 年前
        1
  •  30
  •   Michael Konietzka    14 年前

    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"));`
    
        2
  •  25
  •   Asencion AhmetB - Google    12 年前

    解决了的。

    mail.setSubject(MimeUtility.encodeText(subject, "utf-8", "B"));
    

    “编码”的法定值是“Q”和“B”。。。“Q”编码是

    看到了吗 http://tools.ietf.org/html/rfc2047 .

        3
  •  3
  •   Mark Szabo    8 年前

    问题解决了!

    mail.setSubject(MimeUtility.encodeText(subject, "utf-8", "B"));
    

    解决它并发送utf-8编码的邮件主题。

    为什么有“B”为什么没有ISO?

        4
  •  0
  •   user2200192    12 年前

    exchange.setProperty(Exchange.CHARSET_NAME, "UTF-8");

    在路由到SMTP之前,解决了问题。

        5
  •  0
  •   Mna    5 年前

    这个 MimeMessage.setSubject(String subject, String charset) mimeMsg.setSubject(主题“utf-8”);

        6
  •  0
  •   seunggabi    4 年前

    解决了的。

    import static java.nio.charset.StandardCharsets.*; 
    
    byte[] bytes = subject.getBytes(ISO_8859_1);
    subject = new String(bytes, UTF_8);
    
    mail.setSubject(subject);
    
    推荐文章