2012-05-02 140 views
1

我的一位客戶正在使用Gmail作爲商業應用(Google Apps的一部分),我不得不重新配置我開發的網站,以便與新憑證相匹配。由於TLS錯誤導致了一些困難,我設法讓代碼在本地主機和我的測試服務器上工作(都是Apache Tomcat 5.5)。一切都很順利,直到我不得不在他的服務器上移動它(託管公司告訴我的另一個Tomcat 5.5)。在客戶端的服務器,我得到以下錯誤:通過gmail的SMTP服務器與Java發送問題

javax.mail.SendFailedException: Sending failed; 
    nested exception is: 
    class javax.mail.MessagingException: Could not connect to SMTP host:   smtp.gmail.com, port: 465; 
    nested exception is: 
    java.io.IOException: Couldn't connect using "javax.net.ssl.SSLSocketFactory" socket factory to host, port: smtp.gmail.com, 465; Exception: java.lang.reflect.InvocationTargetException 

奇怪的是,本地主機和測試服務器上的端口465正常工作,並表示,從託管的傢伙端口被打開自己的服務器上。

連接到郵件服務器的代碼是:

​​

用下面的.properties文件

mail.smtp.starttls.enable=true 
mail.smtp.host=smtp.gmail.com 
mail.smtp.auth=true 
mail.smtp.starttls.required=true 
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory 
mail.smtp.socketFactory.fallback=false 
mail.smtp.port=465 
mail.transport.protocol=smtps 
[email protected] 
mail.userpassword=password 
[email protected] 
[email protected] 

我嘗試使用Gmail,587其他端口,但它不工作的任何服務器。即使25號港口也不會做到這一點。

那麼,我做錯了什麼,我該如何做郵件工作?

+2

你能在日誌中找到關於InvocationTargetException的更多信息嗎?希望有一個堆棧跟蹤? –

+0

在麻煩的服務器上使用了什麼JVM? –

回答

2

擺脫所有的套接字工廠屬性;如果您使用的是相當新的JavaMail版本,則不需要它們。請參閱JavaMail FAQ for how to configure JavaMail to access Gmail。如果仍然無法正常工作,您還會在其中找到調試技巧。

另外,將Session.getDefaultInstance更改爲Session.getInstance。

最後,如果你設置「mail.transport.protocol」到「SMTPS」,你需要設置其他屬性「mail.smtps。」性質,而不是「mail.smtp。」屬性。

0

看來你有問題java.lang.reflect.InvocationTargetException。所以,我的意思是這不是網絡問題。可能是你指定了一些錯誤的參數,JavaMail API路徑無法調用方法。也許你應該指定屬性mail.smtp.ssl.socketFactory

這裏的一些文檔http://javamail.kenai.com/nonav/javadocs/com/sun/mail/smtp/package-summary.html

+0

嘗試正確指定mail.smtp.ssl.socketFactory,但我得到相同的錯誤... –

+0

這只是一個預測。你有沒有嘗試ping這個主機?另外,嘗試使用任何telnet客戶端連接到此主機和此端口。或使用某些軟件監控網絡活動(例如,WireShark)。可能是網絡問題。 –

相關問題