【问题标题】:Java Mail api, connection gets lost during message processJava Mail api,在消息过程中连接丢失
【发布时间】:2018-10-17 17:39:14
【问题描述】:

在我们的 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 检查放在 循环,它会使代码变脏并导致性能问题, 放入try catch块并检查是否是一个好习惯 IO异常? (文件夹关闭)或其他建议?哪些例外 应该处理?在某些情况下,消息不是 可解析,但连接正常。

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

【问题讨论】:

  • 请显示错误日志
  • 我们有任何详细的日志,日志只说它是从 isConnected 块返回的。由于未连接,日志仅转储返回。我们没有在那里实现详细的日志。

标签: java email jakarta-mail message pop3


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

【讨论】:

    猜你喜欢
    • 2014-02-28
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    相关资源
    最近更新 更多