title: Javamail: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException when sending mail from VPS
body: <p>I have the following problem. I have a Seam web application which features e-mail composition and sending using Javamail. The application sends mail just fine in my local JBoss application server, but it doesn't work on the JBoss server installed in my myhosting.com VPS. I read that the issue may be because the web server or the URL to which I'm trying to connect does not have a valid certificate from an authorized CA, but I run an utility (<a href="http://cold-caffein.blogspot.com/2011/07/looks-like-article-no-more-unable-to.html" rel="nofollow">http://cold-caffein.blogspot.com/2011/07/looks-like-article-no-more-unable-to.html</a>) that lets me verify the certificates and they appear to be fine (I'm connecting to Gmail).</p>
  
  <p>The relevant code for setting Session properties follows:</p>
  
  <pre><code>props.put("mail.smtp.auth", "true");
  props.setProperty("mail.smtp.starttls.enable", "true");
  </code></pre>
  
  <p>I read that another cause for the issue could be using mail.smtp.starttls.enable set to true, but the code doesn't work at all (in my local server or in the VPS)  if I omit the second line or set the property to false.</p>
  
  <p>I don't know if the problem has something to do with the mail2web mail service that myhosting offers (look at line 9 in both logs I'm providing below, it's where things start going different). Here are the local Javamail log and the VPS' server log (the latter shows the error I'm getting):</p>
  
  <p><strong>Local log:</strong></p>
  
  <pre><code>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
  ...
  </code></pre>
  
  <p>and mail is sent sucessfully.</p>
  
  <p><strong>VPS log:</strong></p>
  
  <pre><code>2011-10-26 19:54:10,290 INFO  [STDOUT] (http-&lt;my-vps-ip-and-jboss-port&gt;-15) DEBUG: setDebug: JavaMail version 1.4ea
  2011-10-26 19:54:10,292 INFO  [STDOUT] (http-&lt;my-vps-ip-and-jboss-port&gt;-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-&lt;my-vps-ip-and-jboss-port&gt;-15) DEBUG SMTP: useEhlo true, useAuth true
  2011-10-26 19:54:10,335 INFO  [STDOUT] (http-&lt;my-vps-ip-and-jboss-port&gt;-15) DEBUG SMTP: useEhlo true, useAuth true
  2011-10-26 19:54:10,335 INFO  [STDOUT] (http-&lt;my-vps-ip-and-jboss-port&gt;-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-&lt;my-vps-ip-and-jboss-port&gt;-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-&lt;my-vps-ip-and-jboss-port&gt;-15) DEBUG SMTP: connected to host "smtp.gmail.com", port: 25
  2011-10-26 19:54:10,418 INFO  [STDOUT] (http-&lt;my-vps-ip-and-jboss-port&gt;-15) EHLO &lt;my-vps-host-name&gt;
  2011-10-26 19:54:10,456 INFO  [STDOUT] (http-&lt;my-vps-ip-and-jboss-port&gt;-15) 250-xsmtp05.mail2web.com Hello &lt;my-vps-host-name&gt; [&lt;my-vps-ip&gt;]
  250-SIZE 104857600
  250-PIPELINING
  250-AUTH PLAIN LOGIN
  250-STARTTLS
  250 HELP
  2011-10-26 19:54:10,456 INFO  [STDOUT] (http-&lt;my-vps-ip-and-jboss-port&gt;-15) DEBUG SMTP: Found extension "SIZE", arg "104857600"
  2011-10-26 19:54:10,456 INFO  [STDOUT] (http-&lt;my-vps-ip-and-jboss-port&gt;-15) DEBUG SMTP: Found extension "PIPELINING", arg ""
  2011-10-26 19:54:10,456 INFO  [STDOUT] (http-&lt;my-vps-ip-and-jboss-port&gt;-15) DEBUG SMTP: Found extension "AUTH", arg "PLAIN LOGIN"
  2011-10-26 19:54:10,456 INFO  [STDOUT] (http-&lt;my-vps-ip-and-jboss-port&gt;-15) DEBUG SMTP: Found extension "STARTTLS", arg ""
  2011-10-26 19:54:10,456 INFO  [STDOUT] (http-&lt;my-vps-ip-and-jboss-port&gt;-15) DEBUG SMTP: Found extension "HELP", arg ""
  2011-10-26 19:54:10,456 INFO  [STDOUT] (http-&lt;my-vps-ip-and-jboss-port&gt;-15) STARTTLS
  2011-10-26 19:54:10,582 INFO  [STDOUT] (http-&lt;my-vps-ip-and-jboss-port&gt;-15) 220 TLS go ahead
  2011-10-26 19:54:10,582 INFO  [STDOUT] (http-&lt;my-vps-ip-and-jboss-port&gt;-15) EHLO &lt;my-vps-host-name&gt;
  2011-10-26 19:54:10,623 ERROR [&lt;Class that sends mail&gt;] (http-&lt;my-vps-ip-and-jboss-port&gt;-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
  </code></pre>
  
  <p>What should I do to get rid of this error?</p>