javax.mail.internet.AddressException:域在字符串中包含非法字符

Sam*_* Z. 2 outlook character

在尝试读取来自 Outlook 的电子邮件的电子邮件收件人时:

message.getRecipients(Message.RecipientType.TO)
Run Code Online (Sandbox Code Playgroud)

我收到以下异常:

Caused by: javax.mail.internet.AddressException: Domain contains illegal character in string ``'xxxxx@yyyyyy.com'''
  at javax.mail.internet.InternetAddress.checkAddress(InternetAddress.java:1269)
    at javax.mail.internet.InternetAddress.parse(InternetAddress.java:1091)
    at javax.mail.internet.InternetAddress.parseHeader(InternetAddress.java:658)
    at javax.mail.internet.MimeMessage.getAddressHeader(MimeMessage.java:701)
    at javax.mail.internet.MimeMessage.getRecipients(MimeMessage.java:534)
Run Code Online (Sandbox Code Playgroud)

问题由电子邮件地址开头和结尾的字符“'”给出。问题是,对于 Outlook 服务器,这是一个有效地址,但对于 MimeMessage 无效,因此当我尝试检索它并应用所有检查时,我收到了异常。

请注意,我不是在创建消息,我只是通过以下方式阅读 Outlook 收件箱文件夹中的任何内容:

Folder inbox = store.getFolder(.......);
messages = inbox.getMessages();
Run Code Online (Sandbox Code Playgroud)

知道如何解决/解决这个问题吗?

非常感谢山姆

Sta*_*007 5

我怀疑您使用的 java 邮件版本高于 1.4,默认情况下启用严格的 RFC822 语法

您可以通过禁用InternetAddress上的“严格”策略来阅读带有引号的电子邮件。

Properties props = new Properties();
props.setProperty("mail.mime.address.strict", "false");
Session session = Session.getDefaultInstance(props, ....);
Run Code Online (Sandbox Code Playgroud)

或者干脆

new InternetAddress("...", false);
Run Code Online (Sandbox Code Playgroud)