1. 程式人生 > >JavaMail IMAPFolder.getMessageByUID 獲取QQ和騰訊企業郵箱新郵件的問題

JavaMail IMAPFolder.getMessageByUID 獲取QQ和騰訊企業郵箱新郵件的問題

  前言:做任何事,不要放棄,靜下心來找到最好的解決方案,會有柳暗花明的那天!

  最近在做郵箱,我們用的是java mail 1.5.6,有個需求是根據郵件的uid來和本地資料庫的郵件比對,得到最新郵件的uid陣列,從而拉取最新的郵件列表,問題就出在這裡,網易163,郵箱可以使用IMAPFolder.getMessageByUID獲取到最新的郵件物件message,而使用扣扣和自己公司的郵箱雖然可以獲取到物件數量,但是debug的資訊是“All element is null”,即物件陣列下的元素均是空的,然後就一頓亂搜,找到了前人的帖子,連結奉上:http://www.itnose.net/detail/6113852.html. 

跟這個帖子上遇到的問題一模一樣,開啟session的debug log如下圖所示:

  

  可以看到上面的2579 FETCH (UID 2904 )對應的其實是最新的郵件,咱們已經獲取到了,2579到2582這四封的郵件,接著往下看,就在解析的時候,出現ParsingException,這四個解析的錯誤一樣,這個錯誤出現了四次(因為最新的郵件就是四封),上面的部落格,相信大家已經看了,其他就是Java mail在FETCH UID的時候,右邊括弧裡邊多了個空格,導致java mail解析出錯(我的內心是崩潰的,這有點低階的錯誤,java mail怎麼能錯),沒辦法,按照帖子上那哥們的做法,需要修改java mail原始碼,這個就略過吧.

 最後是這樣的,換了一個jar包,我發現java mail還一直有在維護,就下載了一個1.6.0時間戳為2017年3月3號的測試版,重新替換1.5.6版後,修改gradle,clean專案,重新執行,驚喜的發現解決了上述問題,那個Parse解析的問題java mail 也給修復了,給java mail團隊點贊,額,研究了一天,發現,最後就替換了個jar包,坑也算是踩遍了,確實這裡面的相關資料太少,希望大家不要踩坑吧!

jar包的連結如下,說是17年夏天釋出1.6.0的正式版吧,期待有更多好用的功能和api 

https://maven.java.net/content/repositories/snapshots/com/sun/mail/javax.mail/1.6.0-SNAPSHOT/


 官網的翻譯:

 不時開發的下一個JavaMail版本的快照版本將釋出到java.net Maven儲存庫。 這些快照版本只收到最少的測試,但可能會提供錯誤修復或正在開發的  新功能的預覽。

 例如,您可以從JavaMail 1.6.0-SNAPSHOT版本中下載javax.mail.jar檔案。 確保滾動到底部,並選擇具有最新時間戳的jar檔案。
 JavaMail 1.6.0的Release Candidate版本現已推出。 這是適用於測試的JavaMail 1.6.0的非最終開發版本。 鼓勵您對此版本的反饋。 JavaMail 1.6.0  的最終版本預計在今年夏天。