尝试连接时javax.mail阻塞

时间:2010-07-08 13:10:50

标签: java email pop3

我遇到了令人不安的事情。我正在设置一个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

非常感谢你的帮助!

摩根

2 个答案:

答案 0 :(得分:2)

哇噢!我实际上找到了绕过这个的方法! 我刚刚在连接上添加了超时!

pop3Props.setProperty("mail.pop3.timeout", "3000"); pop3Props.setProperty("mail.pop3.connectiontimeout", "3000");

非常感谢所有事情! :)

答案 1 :(得分:1)

我查看了文件 - 我认为readLine()方法不是问题所在。由于DataInputStream是从套接字中读取的,我会尝试检查套接字是否有问题(例如,您是否意外关闭了套接字)或使用您提供的参数来创建套接字。