Jboss Javamail:javax.net.ssl.SSLHandshakeException:sun.security.validator.validator从VPS发送邮件时发生异常

Jboss Javamail:javax.net.ssl.SSLHandshakeException:sun.security.validator.validator从VPS发送邮件时发生异常,jboss,seam,jakarta-mail,vps,sslhandshakeexception,Jboss,Seam,Jakarta Mail,Vps,Sslhandshakeexception,我有以下问题。我有一个SeamWeb应用程序,它的特点是电子邮件合成和使用Javamail发送。该应用程序在我的本地JBoss应用程序服务器中发送邮件,但在我的myhosting.com VPS中安装的JBoss服务器上无法工作。我读到这个问题可能是因为我试图连接的web服务器或URL没有来自授权CA的有效证书,但我运行了一个实用程序(),它允许我验证证书,并且它们看起来很好(我正在连接到Gmail) 设置会话属性的相关代码如下所示: props.put("mail.smtp.auth", "t

我有以下问题。我有一个SeamWeb应用程序,它的特点是电子邮件合成和使用Javamail发送。该应用程序在我的本地JBoss应用程序服务器中发送邮件,但在我的myhosting.com VPS中安装的JBoss服务器上无法工作。我读到这个问题可能是因为我试图连接的web服务器或URL没有来自授权CA的有效证书,但我运行了一个实用程序(),它允许我验证证书,并且它们看起来很好(我正在连接到Gmail)

设置会话属性的相关代码如下所示:

props.put("mail.smtp.auth", "true");
props.setProperty("mail.smtp.starttls.enable", "true");
我了解到问题的另一个原因可能是使用mail.smtp.starttls.enable将其设置为true,但是如果我省略第二行或将属性设置为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
...
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
邮件发送成功

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
...
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
2011-10-26 19:54:10290信息[STDOUT](http--15)调试:setDebug:JavaMail版本1.4ea
2011-10-26 19:54:10292信息[STDOUT](http--15)调试:getProvider()返回javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,sun Microsystems,Inc]
2011-10-26 19:54:10335信息[STDOUT](http--15)调试SMTP:useEhlo true,useAuth true
2011-10-26 19:54:10335信息[STDOUT](http--15)调试SMTP:useEhlo true,useAuth true
2011-10-26 19:54:10335信息[STDOUT](http--15)调试SMTP:尝试连接到主机“SMTP.gmail.com”,端口25,isSSL false
2011-10-26 19:54:10418信息[STDOUT](http--15)220xsmtp05.mail2web.com ESMTP进出口星期三,2011年10月26日19:54:09-0400
2011-10-26 19:54:10418信息[STDOUT](http--15)调试SMTP:已连接到主机“SMTP.gmail.com”,端口:25
2011-10-26 19:54:10418信息[STDOUT](http--15)EHLO
2011-10-26 19:54:10456信息[标准输出](http--15)250-xsmtp05.mail2web.com你好[]
250号104857600
250-流水线
250-AUTH普通登录
250-STARTTLS
250帮助
2011-10-26 19:54:10456信息[STDOUT](http--15)调试SMTP:找到扩展名“SIZE”,arg“104857600”
2011-10-26 19:54:10456信息[STDOUT](http--15)调试SMTP:找到扩展名“管道”,arg“”
2011-10-26 19:54:10456信息[STDOUT](http--15)调试SMTP:找到扩展名“AUTH”,arg“PLAIN LOGIN”
2011-10-26 19:54:10456信息[STDOUT](http--15)调试SMTP:找到扩展名“STARTTLS”,arg“”
2011-10-26 19:54:10456信息[STDOUT](http--15)调试SMTP:找到扩展名“HELP”,arg“”
2011-10-26 19:54:10456信息[标准输出](http--15)标准输出
2011-10-26 19:54:10582信息[STDOUT](http--15)220 TLS继续
2011-10-26 19:54:10582信息[标准输出](http--15)EHLO
2011-10-26 19:54:10623错误[](http--15)无法向SMTP主机发送命令
javax.mail.MessaginException:无法向SMTP主机发送命令;
嵌套异常是:
javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径
...
原因:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径
...
原因:sun.security.validator.validator异常:PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径
...
原因:sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径

我应该怎么做才能消除这个错误?

问题解决了,它既不是网络问题,也不是代码问题。我们使用的是javamail-1.4,升级到1.4.4版后,问题就消失了。

您可以在(现在的版本是1.5.5)升级库javax.mail.jar并添加代码:

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

您是否从VPS本身运行上述实用程序?它的信任库似乎有问题。是的,更新库是解决方案。通过使用Apache Commons Email,我们将所有这些“在这里和那里放置属性,手工完成所有操作”抛在脑后。它比java mail好吗?它构建在JavaMail之上:“Commons Email旨在提供发送电子邮件的API。它构建在java mail API之上,旨在简化。”()。它允许你用更少的LOC和更少的麻烦发送邮件。