最近在開發一個發送、接收郵件的功能,發送郵件采用的是阿裡雲的郵件服務,用于推送公司的一些業務郵件,郵件回複位址是騰訊企業郵箱,在收件時采用的是imap協定,開發時可以正常的擷取收件箱内的郵件,但是測試時卻報了以下錯誤
javax.mail.MessagingException: Failed to load IMAP envelope
at com.sun.mail.imap.IMAPMessage.loadEnvelope(IMAPMessage.java:)
at com.sun.mail.imap.IMAPMessage.getSubject(IMAPMessage.java:)
經過debug發現是在com.sun.mail.imap.IMAPMessage的1240行的判斷未通過,導緻envelope為null,進而抛出錯誤
if (r[i] == null ||
!(r[i] instanceof FetchResponse) ||
((FetchResponse)r[i]).getNumber() != seqnum)
continue;
在網上也查找了很多文章,對這個問題并沒有什麼明确的分析,本人從結果上看,通過smtp發送(程式)的郵件不能用imap接收,限于時間問題,未再深入研究出現原因,隻是将收件方式替換為了pop3,目前測試是ok的,未再出現異常情況。
需要注意的是服務郵件内的用戶端設定可能需要進行響應的調整,如騰訊企業郵箱:設定-用戶端設定-收取選項-收取“30”天的郵件,需要調整為收取所有郵件。