繁体   English   中英

Java Mail API,消息过程中连接丢失

[英]Java Mail api, connection gets lost during message process

在我们的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循环过程中丢失。 我们可以在日志中看到加薪异常。 我的问题:

  • AFAIK,邮件服务器有时可以拒绝新的连接,但是它是否会终止当前的活动连接(可能是因为连接过多或断开了旧连接以提供对新连接的访问​​权限?)

  • 商店断开连接后,文件夹也被关闭吗?

  • 检查文件夹是否更好?

  • 连接可能会在for循环中的任何地方丢失,并且在循环中的每个地方放置isConnected检查似乎不是一个好习惯,这会使代码变脏并且还会导致性能问题,将它放入一个好习惯是一个好习惯。尝试catch块并检查IOExceptions? (文件夹已关闭)或其他建议? 应该处理哪些异常? 在某些情况下,消息不可解析但连接正常。

  • 如何添加断开连接侦听器?

  • 网络连接可能由于多种原因而断开。 您的程序始终必须准备好随时断开连接。
  • 对于POP3,只有一个连接,因此,如果断开连接,则应断开存储并断开文件夹。
  • 如果文件夹已打开,请检查文件夹。 否则,请检查商店。
  • 您需要一种处理故障的策略。 如果您跟踪已成功处理了哪些消息,则可能在失败后从下一条消息重新开始处理。 许多细节取决于您的环境和您的应用程序要求。
  • 断开连接的侦听器不会使此操作更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM