我正在尝试通过 Gmail SMTP 服务器使用 JavaMail 发送电子邮件。这是代码:
final String username = "mygmail@gmail.com";
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("no-reply@gmail.com"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("test@gmail.com"));
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);
}
返回此错误:
无法将套接字转换为 TLS;
完整的堆栈跟踪:
线程“main”中的异常 java.lang.RuntimeException:javax.mail.MessagingException:无法将套接字转换为 TLS;嵌套异常是:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法在 Test.main(Test .java:43) 原因:javax.mail.MessagingException:无法将套接字转换为 TLS;嵌套异常是:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法在 com.sun.mail 中找到请求目标的有效证书路径.smtp.SMTPTransport.startTLS(SMTPTransport.java:1907) 在 com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:666) 在 javax.mail.Service.connect(Service.java:317) 在 javax。 mail.Service.connect(Service.java:176) 在 javax.mail.Service.connect(Service.java:125) 在 javax.mail.Transport.send0(Transport.java:194) 在 javax.mail.Transport.send (Transport.java:124) at Test.main(Test.java:38) 原因:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath。 SunCertPathBuilderException:无法在 com.sun.net.ssl.internal 的 com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174) 处找到请求目标的有效证书路径。 ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1649) 在 com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241) 在 com.sun.net.ssl.internal.ssl.Handshaker。 com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1206) 的致命SE(Handshaker.java:235) com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker. java:136) 在 com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593) 在 com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893) 在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138) 在 com.sun .net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165) 在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1149) 在 com.sun.mail.util .SocketFetcher.configureSSLSocket(SocketFetcher.java:549) 在 com.sun.mail.util.SocketFetcher.start TLS(SocketFetcher.java:486) at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1902) … 7 更多原因:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun. security.provider.certpath.SunCertPathBuilderException:无法在 sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:217) 的 sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:323) 中找到请求目标的有效证书路径) 在 sun.security.validator.Validator.validate(Validator.java:218) 在 com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126) 在 com.sun.net.ssl。 internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209) 在 com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249) 在 com.sun.net.ssl.internal.ssl。 ClientHandshaker.serverCertificate(ClientHandshaker.java:1185) … 17 更多原因:sun.security.provider.certpath.SunCertPathBuilderException :无法在 sun.security 的 java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238) 的 sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174) 中找到请求目标的有效认证路径.validator.PKIXValidator.doBuild(PKIXValidator.java:318) … 23 更多
原文由 user962206 发布,翻译遵循 CC BY-SA 4.0 许可协议