JavaMail在IMAPMessage.loadEnvelope()上间歇性地抛出FolderClosedException
我有一个java服务,它使用来自Postfix邮件服务器的电子邮件。它每秒处理1封电子邮件,并处理电子邮件的内容 但是,我偶尔会遇到这样的例外情况:JavaMail在IMAPMessage.loadEnvelope()上间歇性地抛出FolderClosedException,java,imap,jakarta-mail,Java,Imap,Jakarta Mail,我有一个java服务,它使用来自Postfix邮件服务器的电子邮件。它每秒处理1封电子邮件,并处理电子邮件的内容 但是,我偶尔会遇到这样的例外情况: javax.mail.FolderClosedException : * BYE [ALERT] Fatal error: Invalid argument - javax.mail.FolderClosedException: * BYE [ALERT] Fatal error: Invalid argument at com.s
javax.mail.FolderClosedException : * BYE [ALERT] Fatal error: Invalid argument - javax.mail.FolderClosedException: * BYE [ALERT] Fatal error: Invalid argument
at com.sun.mail.imap.IMAPMessage.loadEnvelope(IMAPMessage.java:1256)
at com.sun.mail.imap.IMAPMessage.getSubject(IMAPMessage.java:335)
at com.mailparser.data.MessageParser.parse(MessageParser.java:33)
如果我退出进程并重新启动它,它将始终对相同的邮件抛出相同的异常,因此它们会被卡在收件箱中
下面是它失败的代码片段:
if (!message.getFolder().isOpen()) {
message.getFolder().open(Folder.READ_WRITE);
Logger.log("Tried to reopen folder"); //This is never hit
}
ReceivedEmail incomingMessage = new ReceivedEmail();
try {
incomingMessage.setSubject(message.getSubject()); // Exception happens here
[...]
} catch {
catch (FolderClosedException ex) {
message.getFolder().open(Folder.READ_WRITE);
Logger.log("Reopened", LogType.debug);
return null;
}
}
正如您所见,在我尝试获取主题之前,我正在检查文件夹是否已打开,因此我怀疑是其他原因导致了此失败。一旦它抛出了被卡住消息的期望值,它就可以使用完全相同的文件夹和连接成功地继续执行
有人知道这件事吗
谢谢
编辑:
比尔要求的调试信息:
DEBUG IMAP: LOGIN command trace suppressed
DEBUG IMAP: LOGIN command result: A0 OK LOGIN Ok.
A1 CAPABILITY
* CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION
A1 OK CAPABILITY completed
A2 LIST INBOX ""
* LIST (\Marked \HasChildren) "." ""
A2 OK LIST completed
A3 LIST "" INBOX.TEST
* LIST (\HasChildren) "." "INBOX.TEST"
A3 OK LIST completed
DEBUG: connection available -- size: 1
A4 SELECT INBOX.TEST
* FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent)
* OK [PERMANENTFLAGS (\* \Draft \Answered \Flagged \Deleted \Seen)] Limited
* 1 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1351176418] Ok
* OK [MYRIGHTS "acdilrsw"] ACL
A4 OK [READ-WRITE] Ok
DEBUG IMAP: IMAPProtocol noop
A7 NOOP
A7 OK NOOP completed
A8 FETCH 1 (FLAGS)
* 1 FETCH (FLAGS (\Answered \Seen))
A8 OK FETCH completed.
A9 FETCH 1 (ENVELOPE INTERNALDATE RFC822.SIZE)
* BYE [ALERT] Fatal error: Invalid argument
我所说的间歇性,是指平均每5000封电子邮件中会发生一封。这看起来像是库或服务器中的一个bug。您可能需要跟踪协议以查看它在做什么以及哪些消息确实导致了错误。服务器正在抱怨某些命令参数值太差,以至于必须中断连接,但它不会告诉您它到底在抱怨什么。要找到答案,您需要查看协议跟踪(请参阅JavaMail常见问题解答)。在这里发布跟踪,我们可以帮助您确定库或客户端是否有问题(不太可能),或者服务器是否有问题(可能)。根据具体的错误,在应用程序中可能有一种解决方法。谢谢比尔。请看我的编辑。如果这不是你想要的,请告诉我,我想这是服务器错误。您可以发布服务器的供应商和版本吗?