JavaMail IMAPFolder.getMessageByUID 获取QQ和腾讯企业邮箱新邮件的问题

来源:互联网 发布:武汉大学网络教育平台 编辑:程序博客网 时间:2024/04/29 19:32

  前言:做任何事,不要放弃,静下心来找到最好的解决方案,会有柳暗花明的那天!

  最近在做邮箱,我们用的是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  的最终版本预计在今年夏天。


2 0
原创粉丝点击