由于某些电子邮件,InternetAddress Parse 在 Mime 标头上失败
Posted
技术标签:
【中文标题】由于某些电子邮件,InternetAddress Parse 在 Mime 标头上失败【英文标题】:InternetAddress Parse failing on Mime Headers because of certain emails 【发布时间】:2018-01-23 21:03:20 【问题描述】:java-gmail-imap
的InternetAddress.parse(String addressList, boolean strict)
函数部分用于解析由,
分隔的电子邮件列表,格式为host@domain
和Personal Name <host@domain>
,符合RFC822 标准。
这通常用于解析电子邮件的 mime 标头(这存在于 gmail api 返回的 Message
对象中的 MessagePartHeader
中)。
问题:parse
方法在遇到无法解析的电子邮件地址时会抛出 AddressException
。这样做的问题是它无法解析整个地址列表,因为可能有一个错误/格式错误/非 ascii 电子邮件地址。有没有一种很好的方法可以将 mime 标头(例如 to、bcc、cc)拆分为单独的电子邮件地址并单独解析它们? (这不像,
上的拆分那么简单,因为名称可能包含,
)。这样我可以本地化错误的电子邮件地址。
此外,是否有更好的 java mime 解析器可以解析电子邮件地址中包含非 ascii 字符的电子邮件(RFC6530、RFC6531 和 RFC6532)?这样我就有更好的机会解析这个不符合 RFC822 的本地化错误电子邮件地址。
【问题讨论】:
您是否明确调用 InternetAddress.parse 方法?或者您是否依赖于 MimeMessage 类完成的隐式解析?如果是后者,请将mail.mime.address.strict
Session 属性设置为false
,这样可以确保您永远不会收到 AddressException。
我明确地调用了InternetAddress.parse
方法。前一种情况我该怎么办?
调用parseHeader方法。
【参考方案1】:
最新版本的 JavaMail 1.6.0 引入了一个新的会话属性,允许使用 UTF-8 邮件地址。只需在 Session 属性中将 mail.mime.allowutf8
设置为 true
。
Properties props = new Properties();
props.put("mail.mime.allowutf8", true);
Session.getInstance(props)
见changelog
【讨论】:
以上是关于由于某些电子邮件,InternetAddress Parse 在 Mime 标头上失败的主要内容,如果未能解决你的问题,请参考以下文章