java - 使用 javax.mail 从 IMAP 服务器读取邮件

标签 java email jakarta-mail imap

我正在尝试使用 javax.mail 从 IMAP 文件夹中读取消息,但是在 fetchig 几条消息之后,我遇到了以下异常:

* 20 FETCH ()
DEBUG IMAPS: ignoring bad response, THROW: 
com.sun.mail.iap.ParsingException: error in FETCH parsing, unrecognized item at index 12, starts with ")
    at com.sun.mail.imap.protocol.FetchResponse.parse(FetchResponse.java:219)
    at com.sun.mail.imap.protocol.FetchResponse.<init>(FetchResponse.java:96)
    at com.sun.mail.imap.protocol.IMAPProtocol.readResponse(IMAPProtocol.java:392)
    at com.sun.mail.iap.Protocol.command(Protocol.java:354)
    at com.sun.mail.imap.protocol.IMAPProtocol.fetch(IMAPProtocol.java:2113)
    at com.sun.mail.imap.protocol.IMAPProtocol.fetch(IMAPProtocol.java:2094)
    at com.sun.mail.imap.IMAPFolder.fetch(IMAPFolder.java:1253)
    at app.mail.imap.ImapClient.synchronizeLocalData(ImapClient.java:563)
    at app.mail.imap.ImapClient.lambda$6(ImapClient.java:351)
    at java.lang.Thread.run(Thread.java:745)
* BYE Internal error occurred. Refer to server log for more information. [2016-11-03 21:20:44]

这是我用来读取消息的代码( session 、存储和文件夹已打开):

final Message[] messages = imapFolder.getMessagesByUID(1, IMAPFolder.LASTUID);
final FetchProfile fp = new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
fp.add(FetchProfile.Item.FLAGS);
imapFolder.fetch(messages, fp);

for (final Message msg : messages)
{
    final long uid = imapFolder.getUID(msg);
    final String subject = MimeUtility.decodeText(msg.getSubject());
    final Date date = msg.getReceivedDate();
    info("MESSAGE: {} -> {} on {}", uid, subject, date);
}

它似乎只发生在非常特定的消息上,并且仅在获取比消息 UID 更多的信息时发生(如果我只读取 uid,则代码可以工作)。

据我所知,许多 IMAP 服务器实现缺乏 IMAP 协议(protocol)的许多功能。考虑到这一点,从 IMAP 文件夹中获取和读取邮件的最安全、最可靠的方法是什么?

javax.mail版本:1.5.3(由wildfly应用服务器10.0.1.Final提供)。

最佳答案

感谢您的帮助。看来确实是 IMAP 服务器错误。当我在网络客户端中打开消息时,我得到:

Connection error (#022).

KMail 也不会下载该文件夹的邮件(我敢打赌其他客户端也是如此)。

关于java - 使用 javax.mail 从 IMAP 服务器读取邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40410971/

相关文章:

java - MySQL datetime 不返回时间

python - 如何使用 Python 和 SMTP 发送格式正确的电子邮件?

ruby-on-rails - 是否可以在邮件模板中使用 CSS 类?

node.js - Mailjet v3.1 邮件发送失败并出现错误代码

java - 如何重构具有多个列表 + 每个列表的 getter 和 setter 的类

java - 无法将名称 [org.hibernate.spatial.dialect.postgis.PostgisDialect] 解析为策略 [org.hibernate.dialect.Dialect]

java - jdbc数据集是否将所有行存储在jvm内存中

java - 在 RTF 消息 JavaMail 中发送表格

JavaMail Exchange 身份验证

JavaMail API 和 Tomcat 7 实现