一小段Java代码用于读取“bunced”电子邮件的IMAP邮箱,并在我们的数据库中设置标志。我们发现代码在处理一些电子邮件时会抛出“FolderClosedException”。这是一个测试它的函数:
private void processStore(Store store) throws MessagingException {
Folder folder=store.getDefaultFolder();
Folder inboxfolder=folder.getFolder("INBOX");
inboxfolder.open(Folder.READ_ONLY);
Message[] msgs=inboxfolder.getMessages();
FetchProfile fp=new FetchProfile();
fp.add("Subject");
fp.add(FetchProfile.Item.ENVELOPE);
// problematic
// fp.add(FetchProfile.Item.CONTENT_INFO);
inboxfolder.fetch(msgs,fp);
for(int i=0;i<msgs.length;++i){
System.out.println(inboxfolder.isOpen());
System.out.println(msgs[i].getSubject());
}
}
我们在这里发现的是,对于那些有问题的电子邮件,如果我们注释掉标记为“有问题”的行,那么每件事都可以。但是,一旦我们取消注释,inboxfolder.isOpen()
就会打印false
并msgs[i].getSubject()
抛出FolderClosedException
。
我们重新调查这可能是Java Mail或我们的邮件服务器(postfix)的问题。那么有没有人知道为什么会发生这种情况,和/或如何诊断和找出导致这个问题的原因?