2017-09-11 90 views
0

我試圖延長連接到電子郵件存儲(Microsoft Exchange服務器)的超時但沒有成功。原因是,在連接到商店的本地計算機上幾乎是瞬間完成的,但在部署代碼的計算機上可能需要幾分鐘的時間。我寧願只有很長的超時時間,而不是連續不斷地嘗試連接。這個怎麼做?這裏是我的代碼(試圖將超時設置爲2分鐘):JavaMail通過imaps連接到電子郵件存儲 - 延長超時

 Properties properties = new Properties(); 
     properties.put("mail.store.protocol", "imaps"); 
     properties.put("mail.imaps.host", IESProperties.STORE_HOST); 
     properties.put("mail.imaps.port", "993"); 
     properties.put("mail.imaps.connectiontimeout", "120000"); // 2 minutes 
     properties.put("mail.imaps.timeout", "120000"); // 2 minutes 

     Session session = Session.getInstance(properties); 
     IMAPStore store = null; 

     try { 
      store = (IMAPStore) session.getStore("imaps"); 
      try { 
       store.connect(IESProperties.STORE_USERNAME, IESProperties.STORE_PASSWORD); 

當我運行這個好像只有10秒左右或者類似的東西后,就放棄了。

jvm 1 | javax.mail.MessagingException: Connection timed out: connect; 
jvm 1 | nested exception is: 
jvm 1 |  java.net.ConnectException: Connection timed out: connect 
jvm 1 |  at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:66 
5) 
jvm 1 |  at javax.mail.Service.connect(Service.java:295) 
jvm 1 |  at javax.mail.Service.connect(Service.java:176) 
jvm 1 |  at javax.mail.Service.connect(Service.java:196) 
jvm 1 |  at com.axa.ets.ies.Main.start(Main.java:297) 
jvm 1 |  at com.axa.ets.ies.Main.main(Main.java:232) 
jvm 1 |  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
jvm 1 |  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
jvm 1 |  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Sourc 
e) 
jvm 1 |  at java.lang.reflect.Method.invoke(Unknown Source) 
jvm 1 |  at org.tanukisoftware.wrapper.WrapperSimpleApp.run(WrapperSimple 
App.java:325) 
jvm 1 |  at java.lang.Thread.run(Unknown Source) 

當我telnet到商店時,它需要很長時間,但通常在大約一分鐘內連接。

如何使用API​​擴展此超時?謝謝

+0

設置** **系統屬性'mail.socket.debug'到TRUE;,使[JavaMail的調試輸出(https://javaee.github.io/javamail/FAQ#debug) ,並驗證它是否獲得了正確的連接超時。還可能有關於連接失敗的更多信息。你在什麼操作系統上使用什麼JDK?什麼是JavaMail版本? JavaMail只是將超時值傳遞給JDK,JDK將其傳遞給操作系統。 –

+0

@ Bill Shannon這絕對是一個超時問題,不需要調試。我可以使用相同的代碼和相同的信息連接其他幾臺機器。我剛剛實施了一個不斷嘗試重新連接並最終成功的解決方案。它與telnet行爲一致。我想我會繼續嘗試重新連接,因爲它看起來沒有代碼解決方案。 – Wes

+0

我只是要求將代碼移動到另一臺服務器,因爲它似乎是服務器的某種滯後問題。 – Wes

回答

0

我不確定你是否可以通過你的代碼來控制它。但是,可能通過服務器控制該服務器(請參閱here - > IMAP4的連接超時限制):

本示例設置空閒身份驗證連接的連接超時限制。

Set-ImapSettings -Identity CAS01 -AuthenticatedConnectionTimeout TimeValue 

本示例爲空閒未經驗證的連接的連接超時限制。

Set-ImapSettings -Identity CAS01 -PreAuthenticatedConnectionTimeout TimeValue 
+0

是的,我不認爲這是一個選項我絕對不想改變服務器,因爲它被很多人使用。 – Wes

+0

我已經請求另一臺服務器將代碼部署到其他地方,因爲它會立即連接到其他任何地方。由於這可能是一些人的解決方案,我會將其標記爲正確的答案。 – Wes