我使用Javamail执行MessageCountListener
来读取Exchange 2010服务器上的传入电子邮件,使用IMAP通过SSL连接。
我们目前正在测试该应用。
大多数时候,该应用处理传入的电子邮件并提取其附件文件,然后将电子邮件标记为“阅读”
:try {
email.setFlag(Flag.ANSWERED, true);
email.setFlag(Flag.SEEN, true);
} catch (final MessagingException e) {
log.warn("Can't set msg to read - fail transaction...", ex);
// etc
}
但在某些日子里,这并不奏效。我可以在Outlook收件箱文件夹中看到大约30%的电子邮件未被删除'。然而,没有异常记录,并且应用程序在其他方面完美运行,所以看起来似乎。
这当然会导致问题,因为应用会在重新启动时重新处理电子邮件及其文件附件,因为它会将其视为未读。
这只在我们的测试服务器上,我还没有能够在我的本地开发盒上重现它。
有人可以建议如何解决这个问题,或者说他们是否也看过这个问题?
我的MessageCountListener
实施:
@Override
public void messagesAdded(final MessageCountEvent event) {
Message[] newEmails = event.getMessages();
if (newEmails != null) {
log.debug(String.format("%d message(s) added", newEmails.length));
for (Message email : newEmails) {
Folder folder = email.getFolder();
Store store = folder.getStore();
statusOK = processor.runTransaction(email);
if (statusOK) {
messageCount++;
} else {
log.trace("shutting down listener due to error");
store.removeConnectionListener((ConnectionListener) this);
break;
}
}
} else {
log.debug("Added null new emails array");
}
}