首先了解一下發郵件如果超時會怎樣,一直阻塞,如果你是用多線程組的話,那么不好意思那你會一直阻塞,解決辦法有嗎?有。
首先先知道一下javamail提供的關於超時的3個參數。
smtp
- mail.smtp.connectiontimeout:連接時間限制,單位毫秒。是關於與郵件服務器建立連接的時間長短的。默認是無限制。
- mail.smtp.timeout:郵件smtp時間限制,單位毫秒。這個是有關郵件讀取時間長短。默認是無限制。
- mail.smtp.writetimeout:郵件發送時間限制,單位毫秒。有關發送郵件時內容上傳的時間長短。默認同樣是無限制。
如此類推,還有2種
imap
- mail.imap.connectiontimeout:連接時間限制,單位毫秒。是關於與郵件服務器建立連接的時間長短的。默認是無限制。
- mail.imap.timeout:郵件smtp時間限制,單位毫秒。這個是有關郵件讀取時間長短。默認是無限制。
- mail.imap.writetimeout:郵件發送時間限制,單位毫秒。有關發送郵件時內容上傳的時間長短。默認同樣是無限制。
pop3
- mail.pop3.connectiontimeout:連接時間限制,單位毫秒。是關於與郵件服務器建立連接的時間長短的。默認是無限制。
- mail.pop3.timeout:郵件smtp時間限制,單位毫秒。這個是有關郵件讀取時間長短。默認是無限制。
- mail.pop3.writetimeout:郵件發送時間限制,單位毫秒。有關發送郵件時內容上傳的時間長短。默認同樣是無限制。
看到沒,不設置默認無限制,那這樣萬一對面服務器出什么問題,那我們這邊如果有多個線程會一直阻塞
所以必須設置,配置很簡單,在發送前和接收前的配置加上時間就好,例如
-
Properties prop = new Properties();//這里不用new,用回你那個就好
-
-
prop.put( "mail.smtp.connectiontimeout", "25000");// 設置接收超時時間
-
prop.put( "mail.smtp.timeout", "25000");// 設置讀取超時時間
-
prop.put( "mail.smtp.writetimeout", "25000");// 設置寫入超時時間
然后問題就解決了!其他類推