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服务器。
答案 0 :(得分:1)
尝试将Session.getDefaultInstance更改为Session.getInstance;阅读差异的javadocs - 您的属性设置可能会被忽略。
您使用的是相对较旧版本的JavaMail,因此您可以尝试升级以查看是否有帮助。 mail.pop3.timeout属性应该这样做。