2017-08-15 98 views
1

java-gmail-imapInternetAddress.parse(String addressList, boolean strict)功能部件的故障對MIME頭是用來解析由形式[email protected],Personal Name <[email protected]>是符合RFC822標準分隔的電子郵件列表。網際地址解析,因爲某些電子郵件

這通常用於解析電子郵件的MIME頭(這在gmail API返回的Message對象中的MessagePartHeader中存在)。

問題parse方法遇到無法解析的電子郵件地址時會拋出AddressException。問題在於它無法解析整個地址列表,因爲可能存在一個錯誤/格式錯誤/非ascii電子郵件地址。是否有將mime標題(如bcc,cc)分成單獨的電子郵件地址並分別解析它們的好方法? (這並不像,那樣簡單,因爲名稱可能包含,)。這樣我可以本地化不良的電子郵件地址。

另外,有沒有更好的Java解析器能解析郵件地址中包含非ASCII字符的郵件(RFC6530,RFC6531和RFC6532)?這樣我可以更好地解析這個不符合RFC822的本地化錯誤電子郵件地址。

+0

你叫的InternetAddress.parse方法明確?或者你是否依賴於MimeMessage類所做的隱式解析?如果是後者,請設置['mail.mime.address.strict'](https://javaee.github.io/javamail/docs/api/javax/mail/internet/package-summary.html#mail.mime。 address.strict)會話屬性爲'false',這應該確保您永遠不會收到AddressException。 –

+0

我正在顯式調用InternetAddress.parse方法。我應該爲前一種情況做些什麼? – iart

+0

調用[parseHeader](https://javaee.github.io/javamail/docs/api/javax/mail/internet/InternetAddress.html#parseHeader-java.lang.String-boolean-)方法。 –

回答

2

最新版本的JavaMail 1.6.0引入了一個新的會話屬性,它允許使用UTF-8郵件地址。在您的會話屬性中,只需將mail.mime.allowutf8設置爲true即可。

Properties props = new Properties(); 
props.put("mail.mime.allowutf8", true); 
Session.getInstance(props) 

看到changelog