2012-04-18 13 views
0
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連接,但不會收到服務器的第一個「確定」。我想要某種超時異常,但該程序只是等待。調試輸出看起來像如何在建立TCP連接但沒有收到確認的情況下暫停Javamail POP3

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爲合理值,但沒有超時丟進。我如何在這種情況下導致超時?

我有一個非常粗略的解決方法,它使用連接到存儲的ConnectionListener並在連接建立時(設置好初始OK和憑證後)設置一個標記,並設置一個獨立的觀察器線程。 Store上的close()方法似乎是synchronized(),因此當我檢測到它太長時,我調用System.exit(1)。

我使用linux命令「nc -l 9898」模擬永不回答「OK」的POP3服務器。

回答

1

嘗試將Session.getDefaultInstance更改爲Session.getInstance;閱讀javadoc的差異 - 你的財產設置可能會被忽略。

您使用的是相對較舊版本的JavaMail,因此您可以嘗試升級以查看是否有幫助。 mail.pop3.timeout屬性應該這樣做。

+0

Javamail 1.4.5有竅門。謝謝!!! – Mitch 2012-04-18 20:28:40

相關問題