1. 程式人生 > >記錄一個奇怪的錯誤,javax.mail.MessagingException: Failed to load IMAP envelope(Android development)

記錄一個奇怪的錯誤,javax.mail.MessagingException: Failed to load IMAP envelope(Android development)

前言

遇到問題,多溝通,冷靜分析,即能解決!

錯誤截圖



上面兩個圖就是出現這個錯誤的log,我用的是JavaMail1.6.0正式版,使用IMAP收取公司郵箱郵件的時候出現的這個問題,可以看到錯誤均指向"MailParse"這個類裡面的88行,這個方法是獲取該郵件發件人郵箱地址資訊,我使用的是getFrom,當然後來我嘗試替換成getHeader("From")效果是一樣的。 我一頁收取的是20條資料,斷點除錯到第18封郵件時報的這個錯誤,奇怪的是,這個時候第18封郵件getHeader頭資訊裡面竟然沒有"From"的資訊,而且此時已經報了javax.mail.MessagingException: Failed to load IMAP envelope,當時的寫法是try-catch塊,捕捉到的錯誤就是javax.mail.MessagingException: Failed to load IMAP envelope

javax.mail.MessagingException: Failed to load IMAP envelope 資料查詢

上網搜尋了下,發現這個錯誤很多,但都是不了了之,很迷惑,但是我還是搜尋到了一點資訊 這篇部落格有明確的指向,可以看到Bill的回覆,翻譯成中文如下: “你的伺服器壞了 請將此錯誤報告給伺服器供應商。 你使用什麼伺服器?


在響應中,訊息的“To”值必須符合規範中定義的此語法:


env-to =“(”1 * address“)”/ nil
address =“(”addr-name SP addr-adl SP addr-mailbox SP addr-host“)”
相反,伺服器已返回“()”。 如果沒有To頭,它應該返回“NIL”。


您可以使用JavaMail FAQ中描述的技術解決伺服器錯誤。”
確實是伺服器壞了, 還有這篇官方對此bug的描述: 可以看到Bill說,這個伺服器的一個bug,請提交這個問題到IBM公司. 上面這個連結是我昨天在stackoverflow上發表的問題,但是並沒有解決我的什麼問題,外國小哥說我,wrong way,but 其他郵箱是可以的啊,暫且記錄下這個奇怪的問題吧,JavaMail真的是坑很多,不急,慢慢踩微笑微笑

20170823復現更新

今天下午又出現了這個錯誤,我發現就我用賬號有問題(我自己的企業郵箱),其他人的賬號均沒有問題,網易等賬號也沒有這個問題,而且在我除錯的時候,發現郵件數量明顯不對,web端明顯到4月份了,而我用Javamail客戶端收取的才到7月24號,後來我到web端查看了下,我發現我勾選了這個選項
這樣客戶端只能拉取最近30天的郵件,我又算了一下,7月24號到今天8月23正好一個月,我說怎麼郵件只能顯示到7月24號;
另外可以很合理的解釋了,為什麼Javamail報的錯誤資訊為javax.mail.MessagingException: Failed to load IMAP envelope,意思就是無法載入信封,因為你限制了這個時間,只能拉取最近30天的郵件,所以之後的郵件你是拉取不了,修改為“收取全部”後,問題解決,完美,開心!