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