如何在建立TCP连接但是没有收到OK时超时Javamail POP3

时间:2012-04-18 19:06:47

标签: java javamail

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连接,但从未收到服务器的第一个“确定”。我想要某种超时异常,但程序只是永远等待。调试输出类似于

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服务器。

1 个答案:

答案 0 :(得分:1)

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

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