2010-07-08 47 views
1

我遇到了一些令人不安的事情。我正在設置一個POP帳戶接收器,而且看起來它在某些情況下正在工作。當我使用端口110連接到我的服務器時,它工作正常(嘗試連接SSL時出現錯誤消息,這是正常的)。 但是,當我嘗試使用SSL的端口995時,它看起來像javax.mail(1.4.3)在執行input.readLine()命令時被阻塞(標記爲廢棄,BTW),而不是拋出IOException它應該拋出...javax.mail嘗試連接時阻塞

我要添加一個超時來防止這種情況,但希望對此有你的意見。有人已經經歷過這個嗎?有關如何克服它的任何想法?

這是我如何創建我的存儲對象:

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

有關「某些」情況的更多信息?你可以發表一些表現奇怪的代碼嗎? – 2010-07-08 13:14:54

+0

嗨。我已經更新了更多細節的討論。非常感謝你! – blaguman 2010-07-08 13:24:17

+0

什麼類型是「輸入」對象? – 2010-07-08 13:46:36

回答

1

我看了一下文件 - 我不認爲的readLine()方法的問題。由於DataInputStream正在讀取套接字,因此我會嘗試檢查套接字是否存在問題(例如,您意外關閉了套接字)或使用您提供的用於創建套接字的參數。

2

嗚呼!我其實找到了一種繞過這個方法! 我剛剛在連接上添加了一個超時值!

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

非常感謝一切! :)

+0

啊,很好。不客氣。 – 2010-07-08 15:15:01