0
Session l_session = Session.getDefaultInstance(l_props);
final Store l_store = l_session.getStore(l_protocol);
l_store.connect(a_req.getServer(), a_req.getPort(), a_req.getUsername(), a_req.getPassword());

与 POP3 服务器的 TCP 连接已建立,但从未收到来自服务器的第一个“OK”。我想要某种超时异常,但程序只是永远等待。调试输出看起来像

DEBUG: setDebug: JavaMail version 1.4.1
DEBUG: getProvider() returning javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsy stems, Inc]
DEBUG POP3: connecting to host "localhost", port 9898, isSSL false

我已将 mail.pop3.timeout 和 mail.pop3.connectiontimeout 设置为合理的值,但从未抛出超时。在这种情况下如何使其超时?

我有一个非常粗略的解决方法,它使用连接到 Store 的 ConnectionListener 并在建立连接时设置一个标志(这似乎是在初始 OK 和凭据之后)和一个单独的观察者线程。Store 上的 close() 方法似乎是 synchronized() 所以当我检测到它已经太长时,我调用了 System.exit(1)。

我使用 linux 命令“nc -l 9898”来模拟从不以“OK”回答的 POP3 服务器。

4

1 回答 1

1

尝试将 Session.getDefaultInstance 更改为 Session.getInstance;阅读 javadocs 以了解差异 - 您的属性设置可能会被忽略。

您使用的是相对较旧的 JavaMail 版本,因此您可以尝试升级以查看是否有帮助。mail.pop3.timeout 属性应该这样做。

于 2012-04-18T19:33:50.760 回答