2011-10-29 20 views
0

我遇到以下問題。我有一個Seam Web應用程序,它具有電子郵件組成和使用Javamail發送的功能。該應用程序在我本地的JBoss應用程序服務器中發送郵件很好,但它不適用於安裝在myhosting.com VPS中的JBoss服務器。我知道這個問題可能是因爲我嘗試連接的Web服務器或URL沒有來自授權CA的有效證書,但我運行了一個實用程序(http://cold-caffein.blogspot.com/2011/07/looks-like-article-no-more-unable-to.html),該實用程序允許我驗證證書並顯示它們沒問題(我正在連接到Gmail)。從VPS發送郵件時Javamail:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException

設置會話屬性相關的代碼如下:

props.put("mail.smtp.auth", "true"); 
props.setProperty("mail.smtp.starttls.enable", "true"); 

,我讀了另一個原因問題可以使用mail.smtp.starttls.enable設置爲true,但代碼不工作所有(在本地服務器或VPS中),如果我省略第二行或將該屬性設置爲false。

我不知道這個問題是否與myhosting提供的mail2web郵件服務有關(請查看下面提供的兩個日誌中的第9行,這是事情開始不同的地方)。這裏是當地的JavaMail日誌和VPS」服務器日誌(後者表示我得到的錯誤):

本地日誌:

18:57:31,129 INFO [STDOUT] DEBUG: setDebug: JavaMail version 1.4ea 
18:57:31,227 INFO [STDOUT] DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc] 
18:57:31,383 INFO [STDOUT] DEBUG SMTP: useEhlo true, useAuth true 
18:57:31,384 INFO [STDOUT] DEBUG SMTP: useEhlo true, useAuth true 
18:57:31,384 INFO [STDOUT] DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 25, isSSL false 
18:57:31,677 INFO [STDOUT] 220 mx.google.com ESMTP c8sm4881699yhm.14 
18:57:31,677 INFO [STDOUT] DEBUG SMTP: connected to host "smtp.gmail.com", port: 25 
18:57:31,680 INFO [STDOUT] EHLO SOFMANSERVER 
18:57:32,088 INFO [STDOUT] 250-mx.google.com at your service, [200.25.201.121] 
250-SIZE 35882577 
250-8BITMIME 
250-STARTTLS 
250-ENHANCEDSTATUSCODES 
250 PIPELINING 
18:57:32,088 INFO [STDOUT] DEBUG SMTP: Found extension "SIZE", arg "35882577" 
18:57:32,088 INFO [STDOUT] DEBUG SMTP: Found extension "8BITMIME", arg "" 
18:57:32,088 INFO [STDOUT] DEBUG SMTP: Found extension "STARTTLS", arg "" 
18:57:32,088 INFO [STDOUT] DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg "" 
18:57:32,088 INFO [STDOUT] DEBUG SMTP: Found extension "PIPELINING", arg "" 
18:57:32,088 INFO [STDOUT] STARTTLS 
18:57:32,212 INFO [STDOUT] 220 2.0.0 Ready to start TLS 
18:57:32,803 INFO [STDOUT] EHLO SOFMANSERVER 
18:57:33,829 INFO [STDOUT] 250-mx.google.com at your service, [200.25.201.121] 
250-SIZE 35882577 
250-8BITMIME 
250-AUTH LOGIN PLAIN XOAUTH 
250-ENHANCEDSTATUSCODES 
250 PIPELINING 
18:57:33,829 INFO [STDOUT] DEBUG SMTP: Found extension "SIZE", arg "35882577" 
18:57:33,829 INFO [STDOUT] DEBUG SMTP: Found extension "8BITMIME", arg "" 
18:57:33,829 INFO [STDOUT] DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH" 
18:57:33,829 INFO [STDOUT] DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg "" 
18:57:33,829 INFO [STDOUT] DEBUG SMTP: Found extension "PIPELINING", arg "" 
18:57:33,829 INFO [STDOUT] DEBUG SMTP: Attempt to authenticate 
18:57:33,829 INFO [STDOUT] AUTH LOGIN 
... 

和郵件發送成功地。

VPS日誌:

2011-10-26 19:54:10,290 INFO [STDOUT] (http-<my-vps-ip-and-jboss-port>-15) DEBUG: setDebug: JavaMail version 1.4ea 
2011-10-26 19:54:10,292 INFO [STDOUT] (http-<my-vps-ip-and-jboss-port>-15) DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc] 
2011-10-26 19:54:10,335 INFO [STDOUT] (http-<my-vps-ip-and-jboss-port>-15) DEBUG SMTP: useEhlo true, useAuth true 
2011-10-26 19:54:10,335 INFO [STDOUT] (http-<my-vps-ip-and-jboss-port>-15) DEBUG SMTP: useEhlo true, useAuth true 
2011-10-26 19:54:10,335 INFO [STDOUT] (http-<my-vps-ip-and-jboss-port>-15) DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 25, isSSL false 
2011-10-26 19:54:10,418 INFO [STDOUT] (http-<my-vps-ip-and-jboss-port>-15) 220 xsmtp05.mail2web.com ESMTP Exim Wed, 26 Oct 2011 19:54:09 -0400 
2011-10-26 19:54:10,418 INFO [STDOUT] (http-<my-vps-ip-and-jboss-port>-15) DEBUG SMTP: connected to host "smtp.gmail.com", port: 25 
2011-10-26 19:54:10,418 INFO [STDOUT] (http-<my-vps-ip-and-jboss-port>-15) EHLO <my-vps-host-name> 
2011-10-26 19:54:10,456 INFO [STDOUT] (http-<my-vps-ip-and-jboss-port>-15) 250-xsmtp05.mail2web.com Hello <my-vps-host-name> [<my-vps-ip>] 
250-SIZE 104857600 
250-PIPELINING 
250-AUTH PLAIN LOGIN 
250-STARTTLS 
250 HELP 
2011-10-26 19:54:10,456 INFO [STDOUT] (http-<my-vps-ip-and-jboss-port>-15) DEBUG SMTP: Found extension "SIZE", arg "104857600" 
2011-10-26 19:54:10,456 INFO [STDOUT] (http-<my-vps-ip-and-jboss-port>-15) DEBUG SMTP: Found extension "PIPELINING", arg "" 
2011-10-26 19:54:10,456 INFO [STDOUT] (http-<my-vps-ip-and-jboss-port>-15) DEBUG SMTP: Found extension "AUTH", arg "PLAIN LOGIN" 
2011-10-26 19:54:10,456 INFO [STDOUT] (http-<my-vps-ip-and-jboss-port>-15) DEBUG SMTP: Found extension "STARTTLS", arg "" 
2011-10-26 19:54:10,456 INFO [STDOUT] (http-<my-vps-ip-and-jboss-port>-15) DEBUG SMTP: Found extension "HELP", arg "" 
2011-10-26 19:54:10,456 INFO [STDOUT] (http-<my-vps-ip-and-jboss-port>-15) STARTTLS 
2011-10-26 19:54:10,582 INFO [STDOUT] (http-<my-vps-ip-and-jboss-port>-15) 220 TLS go ahead 
2011-10-26 19:54:10,582 INFO [STDOUT] (http-<my-vps-ip-and-jboss-port>-15) EHLO <my-vps-host-name> 
2011-10-26 19:54:10,623 ERROR [<Class that sends mail>] (http-<my-vps-ip-and-jboss-port>-15) Can't send command to SMTP host 
javax.mail.MessagingException: Can't send command to SMTP host; 
    nested exception is: 
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

    ... 

    Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

    ... 

    Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

    ... 

    Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

我應該怎麼做才能擺脫這種錯誤的?

+0

你運行從VPS自身上述效用?這似乎是它的信任存儲的問題。 – jsight

回答

2

問題解決了,它既不是網絡問題,也不是代碼問題。我們使用的是javamail-1.4,升級到版本1.4.4後,問題消失了。

0

您可以在https://java.net/projects/javamail/pages/Home升級庫javax.mail.jar(現在的版本是1.5.5),並添加代碼:

MailSSLSocketFactory sf = new MailSSLSocketFactory(); 
sf.setTrustAllHosts(true); 
props.put("mail.smtp.ssl.trust", "*"); 
props.put("mail.smtp.ssl.socketFactory", sf); 
+0

是的,更新庫是解決方案。通過使用Apache Commons Email,我們已經把所有這些'放在手邊的屬性'放在了後面。 – jpangamarca

+0

它比java郵件更好嗎? – TungHarry

+0

它建立在JavaMail的基礎之上:「Commons Email旨在提供一個用於發送電子郵件的API,它建立在Java Mail API之上,旨在簡化它。」 (https://commons.apache.org/proper/commons-email/)。它可以讓你實際發送更少LOC的電子郵件,而不用大驚小怪。 – jpangamarca