2011-10-29 5 views
0

다음과 같은 문제가 있습니다. 이메일 구성과 Javamail을 사용하여 전송하는 Seam 웹 응용 프로그램이 있습니다. 응용 프로그램은 로컬 JBoss 응용 프로그램 서버에서 메일을 전송하지만 myhosting.com VPS에 설치된 JBoss 서버에서는 작동하지 않습니다. 연결하려는 웹 서버 또는 URL에 인증 된 CA의 유효한 인증서가 없기 때문에이 문제가 발생할 수 있지만 인증서를 확인할 수있는 유틸리티 (http://cold-caffein.blogspot.com/2011/07/looks-like-article-no-more-unable-to.html)가 실행되어 나타납니다. 괜찮 으면 (Gmail에 연결 중입니다).Javamail : javax.net.ssl.SSLHandshakeException : VPS에서 메일을 보낼 때 sun.security.validator.ValidatorException

세션 속성을 설정하는 관련 코드는 다음과 같습니다

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

내가 문제에 대한 또 다른 원인은 참으로 mail.smtp.starttls.enable 세트를 사용 할 수 있지만, 코드가 작동하지 않는 읽기 두 번째 줄을 생략하거나 속성을 false로 설정하면 (내 로컬 서버 또는 VPS에서) 모두.

문제가 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

당신은 (현재 버전은 1.5.5이다) https://java.net/projects/javamail/pages/Home에서 라이브러리 javax.mail.jar를 업그레이드 할 수 있으며, 코드를 추가

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

예, 라이브러리를 업데이트하는 것이 해결책이었습니다. 우리는 아파치 커먼즈 이메일을 사용하여이 모든 것을 '뒤에 놓고 - 할 일'이라고 남겨 두었습니다. – jpangamarca

+0

자바 메일보다 좋습니다. – TungHarry

+0

JavaMail을 기반으로 구축되었습니다 : "Commons Email은 이메일을 보내기위한 API를 제공하는 것을 목표로하며 Java Mail API를 기반으로하여 단순화하는 것을 목표로합니다." (https://commons.apache.org/proper/commons-email/). 실제로 적은 수의 LOC로 메일을 보낼 수 있으며 매우 불편을 덜어줍니다. – jpangamarca

관련 문제