java - 将 javax.mail.internet.MimeMessage 发送给非 ASCII 名称的收件人?

标签 java email unicode header mime

我正在编写一段 Java 代码,需要向具有非 ASCII 名称的用户发送邮件。我已经弄清楚如何将 UTF-8 用于正文、主题行和通用 header ,但我仍然停留在收件人上。

这是我希望“收件人:”字段中的内容:"ウィキペディアにようこそ" <foo@example.com> .这(对于我们今天的目的)存在于一个名为 recip 的字符串中.

  • msg.addRecipients(MimeMessage.RecipientType.TO, recip)给出 "忙俾ェ▎S]" <foo@example.com>
  • msg.addHeader("To", MimeUtility.encodeText(recip, "utf-8", "B"))抛出 AddressException: Local address contains control or whitespace in string ``=?utf-8?B?IuOCpuOCo+OCreODmuODh+OCo+OCouOBq+OCiOOBhuOBk+OBnSIgPA==?= =?utf-8?B?Zm9vQGV4YW1wbGUuY29tPg==?=''

我到底应该如何发送这条消息?


以下是我处理其他组件的方式:

  • 正文 HTML:msg.setText(body, "UTF-8", "html");
  • header :msg.addHeader(name, MimeUtility.encodeText(value, "utf-8", "B"));
  • 主题:msg.setSubject(subject, "utf-8");

最佳答案

呃,用一个愚蠢的 hack 得到它:

/**
 * Parses addresses and re-encodes them in a way that won't cause {@link MimeMessage}
 * to freak out. This appears to be the only robust way of sending mail to recipients
 * with non-ASCII names. 
 * 
 * @param addresses  The usual comma-delimited list of email addresses.
 */
InternetAddress[] unicodifyAddresses(String addresses) throws AddressException {
    InternetAddress[] recips = InternetAddress.parse(addresses, false);
    for(int i=0; i<recips.length; i++) {
        try {
            recips[i] = new InternetAddress(recips[i].getAddress(), recips[i].getPersonal(), "utf-8");
        } catch(UnsupportedEncodingException uee) {
            throw new RuntimeException("utf-8 not valid encoding?", uee);
        }
    }
    return recips;
}

我希望这对某人有用。

关于java - 将 javax.mail.internet.MimeMessage 发送给非 ASCII 名称的收件人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2656478/

相关文章:

java - 小程序一 jar

java - 如何使用 JNA 将 com.sun.jna.Structure 从 Java 传递到 C 中的结构

html - 如何从电子邮件中删除类 MsoNormal

python - 如何在 Python 3 中腌制和取消腌制到可移植字符串

javascript - 谁执行 unicode 规范化以及何时执行?

objective-c - 有没有办法做一半的换行符?

java - 如何在Java中居中一个窗口?

java - 我不知道输入是否为空要打印

email - 测试电子邮件功能的好方法

php - GitHub 'Reply by Email' 是如何工作的?