我遇到了令人不安的事情。我正在设置一个POP帐户接收器,看起来它在某些情况下有效。当我使用端口110连接到我的服务器时,它正常工作(尝试连接SSL时只有一条错误消息,这是正常的)。 但是当我尝试使用SSL的端口995时,看起来javax.mail(1.4.3)在执行input.readLine()命令(标记为已弃用,BTW)时阻塞,而不是抛出IOException它应该扔...
我要添加一个超时来防止这种情况,但是想对此有所了解。有人已经体验过这个吗?关于如何克服它的任何想法?
这就是我创建Store对象的方式:
Properties pop3Props = new Properties();
pop3Props.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
pop3Props.setProperty("mail.pop3.socketFactory.fallback", "false");
pop3Props.setProperty("mail.pop3.port", Integer.toString(hostPort));
pop3Props.setProperty("mail.pop3.socketFactory.port", Integer.toString(hostPort));
pop3Props.setProperty("mail.pop3.starttls.enable", String.valueOf(STARTTLS));
pop3Props.setProperty("mail.pop3.auth", String.valueOf(AUTH));
// Create session and URL
Session session = Session.getInstance(pop3Props, null);
session.setDebug(true);
URLName url = new URLName(POP3, host, hostPort, "", username, password);
// Create the store
if (useSSL) {
return new POP3SSLStore(session, url);
} else {
return new POP3Store(session, url);
}
这就是我尝试连接此对象的方式:
store.connect(host, hostPort, username, password);
这是javax.mail行,它使一切都冻结(包括原始评论):
String line = input.readLine(); // XXX - readLine is deprecated
非常感谢你的帮助!
摩根
答案 0 :(得分:2)
哇噢!我实际上找到了绕过这个的方法! 我刚刚在连接上添加了超时!
pop3Props.setProperty("mail.pop3.timeout", "3000"); pop3Props.setProperty("mail.pop3.connectiontimeout", "3000");
非常感谢所有事情! :)
答案 1 :(得分:1)
我查看了文件 - 我认为readLine()方法不是问题所在。由于DataInputStream是从套接字中读取的,我会尝试检查套接字是否有问题(例如,您是否意外关闭了套接字)或使用您提供的参数来创建套接字。