2013-06-30 31 views
0

我正在使用JavaMail的SMTPTransport.sendMessage方法來發送電子郵件在我的Android應用程序,一切工作正常......但是當我開始發送消息,並在中間,我禁用我的無線網絡,它得到卡住。我已經等了一個多小時,現在仍然卡住了;沒有例外拋出......任何想法如何處理這種情況?SMTPTransport的sendMessage被困在連接丟失

編輯:

我加了超時

props.put("mail.smtp.connectiontimeout", "3000"); 
props.put("mail.smtp.timeout", "3000"); 

似乎不工作...我已經模擬了一個連接損耗,它已經現在5分鐘,它仍然是處於發送狀態並且沒有超時

EDIT2:

16mins

06-30 18:47:27.722: I/System.out(15906): javax.net.ssl.SSLException: Write error: ssl=0xdf8268: I/O error during system call, Invalid argument 

編輯3後超時/錯誤(甚至不知道這是一個超時)發生:

它並不總是拋出一個異常...我模擬了一個連接丟失後1小時,仍然沒有例外...它是處於發送狀態.....且尚未返回:(

回答

2

JavaMail的當前版本只處理超時的讀,因爲這是所有的JDK支持。對於下一個JavaMail版本,我增加了對寫入超時的支持。您可以使用maven.java.net存儲庫中提供的JavaMail的1.5.1-SNAPSHOT版本進行試驗。您需要設置「mail.smtp.writetimeout」屬性。不知道這是否會幫助你在Android,因爲它不是真正的Java ...

+0

確定THX我會試試看! 你能推薦一個很好的值smtp.timeout讀取超時?我已經將它設置爲3000,即使郵件實際發送成功(即smtp的回覆超時並拋出錯誤),我也會收到很多超時錯誤 – yeahman

+0

ok thx我會試一試! – yeahman

+0

如果您的郵件服務器處於繁忙狀態,則3秒鐘的時間會非常短暫。你可能需要試驗以找出最好的。超時應該與應用程序可以容忍的一樣大,因爲它只能在非常罕見的情況下觸發。它不應該基於你希望郵件服務器的速度有多快,或者你認爲它應該有多快。 –