【问题标题】:javax.mail blocking while trying to connect尝试连接时 javax.mail 阻塞
【发布时间】:2011-03-13 08:18:33
【问题描述】:

我遇到了一些令人不安的事情。我正在设置一个 POP 帐户接收器,它看起来在某些情况下可以正常工作。当我使用端口 110 连接到我的服务器时,它工作正常(尝试连接 SSL 时出现错误消息,这是正常的)。 但是当我尝试使用 SSL 的端口 995 时,看起来 javax.mail (1.4.3) 在执行 input.readLine() 命令(标记为已弃用,顺便说一句)时阻塞,而不是抛出 IOException它应该抛出......

我将添加一个超时来防止这种情况发生,但想听听您对此的看法。有人已经经历过吗?知道如何克服它吗?

这就是我创建 Store 对象的方式:

Properties pop3Props = new Properties();
        pop3Props.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        pop3Props.setProperty("mail.pop3.socketFactory.fallback", "false");
        pop3Props.setProperty("mail.pop3.port", Integer.toString(hostPort));
        pop3Props.setProperty("mail.pop3.socketFactory.port", Integer.toString(hostPort));
        pop3Props.setProperty("mail.pop3.starttls.enable", String.valueOf(STARTTLS));
        pop3Props.setProperty("mail.pop3.auth", String.valueOf(AUTH));

        // Create session and URL
        Session session = Session.getInstance(pop3Props, null);
        session.setDebug(true);
        URLName url = new URLName(POP3, host, hostPort, "", username, password);

        // Create the store
        if (useSSL) {
            return new POP3SSLStore(session, url);
        } else {
            return new POP3Store(session, url);
        }

这就是我试图连接这个对象的方式:

store.connect(host, hostPort, username, password);

这是使一切冻结的 javax.mail 行(包括原始评论):

String line = input.readLine(); // XXX - readLine is deprecated

非常感谢您的帮助!

摩根

【问题讨论】:

  • 关于“某些”案例的更多信息?您能发布一段行为异常的代码吗?
  • 嗨。我已经用更多细节更新了讨论。非常感谢!
  • “输入”对象是什么类型的?
  • 这是一个数据输入流。我没有写太多关于 javax.mail 代码的文章,因为我猜/希望它应该可以工作......我可能在配置中遗漏了一些东西,但看不到什么。我检查了java.sun.com/products/javamail/javadocs/com/sun/mail/pop3/… 以了解哪些属性可能导致或防止任何问题,但我被困住了......非常感谢!

标签: java email pop3


【解决方案1】:

哇哦!我实际上找到了绕过这个的方法! 我刚刚在连接上添加了超时!

pop3Props.setProperty("mail.pop3.timeout", "3000"); pop3Props.setProperty("mail.pop3.connectiontimeout", "3000");

非常感谢您所做的一切! :)

【讨论】:

    【解决方案2】:

    我查看了文件 - 我认为 readLine() 方法不是问题所在。由于 DataInputStream 是从套接字读取的,我会尝试检查套接字是否存在问题(例如,您不小心将其关闭)或您提供的用于创建套接字的参数是否存在问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 2019-04-10
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多