Java Mail api,连接在消息处理过程中丢失

时间:2018-05-07 20:51:29

标签: java email javamail message pop3

在我们的java邮件(使用Java Mail API)应用程序中,我们首先连接到邮件服务器,获取邮件,处理标题,然后像往常一样使用pop3处理邮件正文和附件。

Session session = Session.getInstance(props, null);
Store store = session.getStore(urln);
store.connect();
Folder f = store.getFolder("INBOX");
f.open(READ);
Messages m = f.getMessages(..);
for (Message m : messages) {
    if (!store.isConnected()) {
        //raise exception
    }
    processSubject();

    processFrom();

    processBodyAndAttachments();

    ..
}

在大多数环境中,实现工作正常,但在某些客户上,在for循环过程中,storeconnection会丢失。我们可以在日志中看到加注异常。我的问题:

  • AFAIK,邮件服务器有时可以拒绝新连接,但确实如此 它终止了当前的生活联系(可能因为太多了 连接或断开旧的连接以访问新的?)

  • 当商店断开连接时,文件夹是否也会关闭?

  • 检查文件夹会更好吗?

  • 在for循环中,连接可能会丢失,但事实并非如此 似乎是一个很好的做法,把isConnected检查到处都是 循环,它会使代码变脏并导致性能问题, 放入try catch块并检查是否是一个好习惯 的IOExceptions? (文件夹关闭)或其他建议?哪个例外 应该处理?可能在某些情况下,消息不是 可解析但连接是健康的。

  • 添加断开连接侦听器怎么样?

1 个答案:

答案 0 :(得分:3)

  • 出于各种原因,可能会破坏网络连接。您的程序必须随时为连接丢弃做好准备。
  • 使用POP3时,只有一个连接,因此如果断开连接,应断开存储,并关闭文件夹。
  • 如果文件夹已打开,请检查文件夹。否则请检查商店。
  • 您需要一个处理失败的策略。如果您跟踪已成功处理的消息,则可能会在失败后的下一条消息中重新启动处理。许多细节取决于您的环境和应用程序要求。
  • 断开连接听众不会让这更容易。