2015-02-10 112 views
1

大家好,感謝您的幫助太多的時間來發送郵件與微軟的Exchange SMTP服務器

我使用JavaMail發送郵件throhght office365 SMTP服務器(smtp.office365.com),但由於某種原因它保留有關60-80秒發送郵件。

stringaHost = "mail.smtp.host"; 
stringaUser = "mail.smtp.user"; 

Security.setProperty("ssl.SocketFactory.provider","com.ibm.jsse2.SSLSocketFactoryImpl"); 
Security.setProperty("ssl.ServerSocketFactory.provider","com.ibm.jsse2.SSLServerSocketFactoryImpl"); 

InitialContext initialContext = null; 
initialContext = new InitialContext(); 

session = (Session)initialContext.lookup(nomeJndi); 

session.getProperties().put("mail.smtp.auth", "true"); 
session.getProperties().put("mail.smtp.socketFactory.port", 465); 
      session.getProperties().put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 

MimeMessage MsgEmail = new MimeMessage(session); 
com.sun.mail.smtp.SMTPTransport t =(com.sun.mail.smtp.SMTPTransport)session.getTransport("smtp");  

t.setStartTLS(true); 
t.connect(smtp.office365.com,myUser,myPassword); 
t.sendMessage(MsgEmail, MsgEmail.getAllRecipients()); 
t.close(); 

java郵件花費超過60秒來評估指令:t.connect(....)。

有關可能發生什麼以及如何縮短這段時間的任何線索?

P.S.我試圖用t.connect()不帶參數,通過系統的技術表示,從該指令使用SMTP傳輸協議操作系統和不使用Office365服務器傳輸協議

感謝

回答

0

首先,你shouldn't need all those socket factory properties

如果延遲的連接調用,可能性是:

  1. 名稱服務是在查找服務器的主機名的IP地址很慢。
  2. SSL協商速度很慢,可能是由於客戶端或服務器上的證書管理。
  3. 服務器正在慢速驗證您的身份。

您可以通過查看InetAddress爲您的服務器查找主機名需要多長時間來測試#1。

您可以通過查看SSLSocket連接服務器需要多長時間來測試#2。

您可以通過實時觀察JavaMail調試輸出來查看延遲時間或從JavaMail獲取時間戳日誌消息來測試#3。

0

非常感謝您的回答。

這種延遲的連接(...)調用

如果我叫

t.connet(hostname, username, password) 

它需要40-60秒連接

如果我叫

t.connect() // without parameters 

它需要200毫秒的連接(我想象因爲它連接到/使用傳輸協議從操作系統)

在我的環境中,我的應用程序安裝在IBM Websphere服務器上,並從此服務器嘗試連接到Office365出站服務器(smtp.office365.com)。

這種延遲是否有可能是由那些相互通信的服務器引起的?

感謝您的支持

相關問題