Javamail Imansible convertire il socket in TLail GMail

Sto tentando di inviare un’email usando JavaMail tramite gmails SMTP Server. tuttavia questo codice.

final String username = "[email protected]"; final String password = "mygmailpassword"; Properties props = new Properties(); props.put("mail.smtp.auth", true); props.put("mail.smtp.starttls.enable", true); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); Session session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress("[email protected]")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]")); message.setSubject("Testing Subject"); message.setText("Dear Mail Crawler," + "\n\n No spam to my email, please!"); Transport.send(message); System.out.println("Done"); } catch (MessagingException e) { throw new RuntimeException(e); } 

Restituisce un errore

 Could not convert socket to TLS; 

Lo Stacktrace completo

 Exception in thread "main" java.lang.RuntimeException: javax.mail.MessagingException: Could not convert socket to TLS; 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 Test.main(Test.java:43) Caused by: javax.mail.MessagingException: Could not convert socket to TLS; 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.startTLS(SMTPTransport.java:1907) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:666) at javax.mail.Service.connect(Service.java:317) at javax.mail.Service.connect(Service.java:176) at javax.mail.Service.connect(Service.java:125) at javax.mail.Transport.send0(Transport.java:194) at javax.mail.Transport.send(Transport.java:124) at Test.main(Test.java:38) 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 com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1649) at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241) at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:235) at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1206) at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:136) at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593) at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1149) at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:549) at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:486) at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1902) ... 7 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:323) at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:217) at sun.security.validator.Validator.validate(Validator.java:218) at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126) at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209) at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249) at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1185) ... 17 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174) at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238) at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:318) ... 23 more 

 props.put("mail.smtp.ssl.trust", "smtp.gmail.com"); 

Assicurati che il tuo programma antivirus non stia interferendo e assicurati di aggiungere un’esclusione al tuo firewall.

Ho disabilitato avast antivirus per 10 minuti e farlo funzionare.

La prima risposta di @carlos ha funzionato per me:

 session.getProperties().put("mail.smtp.ssl.trust", "smtp.gmail.com"); 

Ho testato la proprietà qui sotto e ha funzionato perfettamente anche per me:

 session.getProperties().put("mail.smtp.starttls.enable", "true"); 

Le due proprietà da sole hanno risolto questo tipo di problema, ma con la garanzia ho usato entrambi.

Prova a utilizzare il programma smtpsend fornito con JavaMail, come descritto qui . Se fallisce allo stesso modo, c’è qualcosa di sbagliato nella configurazione di JDK o nella configurazione di rete.

Se il tuo contesto è un’applicazione Android, assicurati che l’ora del tuo dispositivo Android sia impostata sulla data e l’ora correnti. L’eccezione sottostante è “I certificati SSL non sono stati autenticati”.

Quello che mi ha aiutato a risolvere questo problema, e ho provato tutto prima di questo, è stato quello di configurare il mio jre installato su JRE 1.8.

Passi in Eclipse: Windows> preferenze> java> JRE installato> jre1.8.0

Se è impostato su jdk, passa a jre (che è ciò che dovrebbe essere impostato per impostazione predefinita con l’ultima versione di java).

Ecco la soluzione di lavoro. È garantito

1) Prima di tutto apri il tuo account Gmail da cui vuoi inviare la posta, come nel tuo caso “” [email protected]

2) apri questo link sotto https://support.google.com/accounts/answer/6010255?hl=it

3) fai clic su “Vai alla sezione” App meno sicure “in Il mio account.” opzione

4) Quindi accendilo

5) questo è tutto (:

ecco il mio codice

 import javax.mail.*; import javax.mail.internet.*; import java.util.*; public class SendEmail { final String senderEmailID = "Sender Email id"; final String senderPassword = "Sender Pass word"; final String emailSMTPserver = "smtp.gmail.com"; final String emailServerPort = "465"; String receiverEmailID = null; static String emailSubject = "Test Mail"; static String emailBody = ":)"; public SendEmail(String receiverEmailID, String emailSubject, String emailBody) { this.receiverEmailID=receiverEmailID; this.emailSubject=emailSubject; this.emailBody=emailBody; Properties props = new Properties(); props.put("mail.smtp.user",senderEmailID); props.put("mail.smtp.host", emailSMTPserver); props.put("mail.smtp.port", emailServerPort); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.socketFactory.port", emailServerPort); props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.socketFactory.fallback", "false"); SecurityManager security = System.getSecurityManager(); try { Authenticator auth = new SMTPAuthenticator(); Session session = Session.getInstance(props, auth); MimeMessage msg = new MimeMessage(session); msg.setText(emailBody); msg.setSubject(emailSubject); msg.setFrom(new InternetAddress(senderEmailID)); msg.addRecipient(Message.RecipientType.TO, new InternetAddress(receiverEmailID)); Transport.send(msg); System.out.println("Message send Successfully:)"); } catch (Exception mex) { mex.printStackTrace(); } } public class SMTPAuthenticator extends javax.mail.Authenticator { public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(senderEmailID, senderPassword); } } public static void main(String[] args) { SendEmail mailSender; mailSender = new SendEmail("Receiver Email id","Testing Code 2 example","Testing Code Body yess"); } }