JavaMail用IMAPFolder.getMessageByUID来获取QQ邮箱的邮件

J2EE 码拜 6年前 (2015-04-03) 1586次浏览 0个评论

用JavaMail的IMAPFolder.getMessageByUID(long arg0)来获取指定UID的邮件,在测试163邮箱时没问题,能拿到数据,但QQ邮箱拿不到数据。帮忙分析下原因!

下面是两个邮箱测试时抓的包。可以看出,QQ邮箱其实已经通过UID拿到了顺序号,接本下来应该是通过顺序号来FETCH内容的,但JavaMail貌似没那么做。

163邮箱:
JavaMail用IMAPFolder.getMessageByUID来获取QQ邮箱的邮件

QQ邮箱:
JavaMail用IMAPFolder.getMessageByUID来获取QQ邮箱的邮件

JavaMail用IMAPFolder.getMessageByUID来获取QQ邮箱的邮件
90分
一个是UIDs valid

一个不是啊

JavaMail用IMAPFolder.getMessageByUID来获取QQ邮箱的邮件
引用 1 楼 huxiweng 的回复:

一个是UIDs valid

一个不是啊

您是说select的返回吗?QQ邮箱返回的是:UID validity status,应该是一个意思吧。

我找到原因了。对IMAP sever返回的数据时,如QQ邮箱的“* 144 FETCH (UID 383 )”,后面的括号里383后有个空格,在debug时,JavaMail会抛异常,被跳过了,所以认为没有这样的邮件。

我简单改了下JavaMail代码,可以获取到邮件。

JavaMail用IMAPFolder.getMessageByUID来获取QQ邮箱的邮件
自己解决了,debug发现JavaMail在处理QQ邮箱时有个bug,修改JavaMail源码可以解决。不知道是否有更好更便捷的方法。
JavaMail用IMAPFolder.getMessageByUID来获取QQ邮箱的邮件
引用 6 楼 zhanghuanhuanlive 的回复:

楼主,请问你改的javamail里哪个地方的代码,能否共享一下

具体代码位置忘了,根据我上面的提示,你debug下很容易就能跟到。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明JavaMail用IMAPFolder.getMessageByUID来获取QQ邮箱的邮件
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!