有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在建立TCP连接但未收到OK时超时Javamail POP3

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

我已经设置了邮件。pop3。超时并发送邮件。pop3。connectiontimeout设置为合理值,但不会引发超时。在这种情况下,如何使其超时

我有一个非常粗糙的解决方法,它使用连接到存储的ConnectionListener,并在建立连接时设置一个标志(似乎在初始OK和凭据之后)和一个单独的watcher线程。Store上的close()方法似乎是synchronized(),因此我调用了一个系统。当我检测到时间过长时退出(1)

我使用linux命令“nc-L9898”来模拟POP3服务器,它从不回答“OK”


共 (1) 个答案

  1. # 1 楼答案

    尝试更改会话。getDefaultInstance到会话。getInstance;可以忽略javadocs属性的差异读取设置

    您使用的是相对较旧的JavaMail版本,因此可以尝试升级,看看这是否有帮助。邮件。pop3。timeout属性应该执行此操作