Unable to send mail via tSendMail component - Gmail

One Star

Unable to send mail via tSendMail component - Gmail

Hi everyone, 
As said into the title, I'm unable to send a mail using the tSendMail component.
This is how i configured the component :
From : "xxxx@gmail.com"
SMTP server : "smtp.gmail.com"
SMTP port : 465
SSL support : checked
Required authentication : I simply filled in my gmail credentials
Whenever I try to send a mail, there you can see the exception message I have : 
Exception in component tSendMail_1
javax.mail.MessagingException: Exception reading response;
  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
at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1462)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1260)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
at javax.mail.Service.connect(Service.java:297)
at javax.mail.Service.connect(Service.java:156)
at javax.mail.Service.connect(Service.java:105)
at javax.mail.Transport.send0(Transport.java:168)
at javax.mail.Transport.send(Transport.java:98)
at test_effiliation.test_0_1.test.tSendMail_1Process(test.java:676)
at test_effiliation.test_0_1.test.runJobInTOS(test.java:1042)
at test_effiliation.test_0_1.test.main(test.java:791)
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
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:928)
at sun.security.ssl.AppInputStream.read(AppInputStream.java:105)
at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:97)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:75)
at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1440)
... 10 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
at sun.security.validator.Validator.validate(Validator.java:260)
at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491)
... 22 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382)
... 28 more
I figured out a way to bypass this exception following those steps :

Create a SSL certificate for gmail port 465 with OpenSSL
Save it with a ".cer" extension
Add the certificate to the Java security keystore you can access through  "jdkx.x.x_xx/jre/lib/security/cacerts"
This certificate is supposed to be valid for more than the next 2 months, however I have to create a new one every 2 days or even less. 
Do you have any idea how not to create a certificate and be able to send a mail whenever I want/need to ? 
Thank you in advance for your answer.
Seraphin
NB : I'm using Talend Open Studio for Data Integration 6.1 and running Java JDK 1.8.0_91
Moderator

Re: Unable to send mail via tSendMail component - Gmail

Hi,
Are you able to successfully import the certificate? By using component tsetkeystore?
Here is an article about:http://stackoverflow.com/questions/6908948/java-sun-security-provider-certpath-suncertpathbuilderexc...
Best regards
Sabrina
--
Don't forget to give kudos when a reply is helpful and click Accept the solution when you think you're good with it.
One Star

Re: Unable to send mail via tSendMail component - Gmail

Hi, 
Thank you for you quick answer.
I'm indeed able to successfully import the certificate into the keystore using the windows command line. However, I did not try with the tSetKeyStore component, what would that change ? 
Is there any way not to create and import a certificate for gmail everytime I have this SSLHandshakeException ? 
Best Regards, 
Séraphin