所以我试着用Java发送一个代码到我的电子邮件中。我开始使用javax.mail,但记得上次我使用它时遇到了问题,所以我转向了Apache Commons Mail。
不过,我还是收到了一堆错误。在SSL上,我得到一个java.net.SocketTimeoutException
在TLS上,我得到了一些错误:
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:2000)
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
当我在谷歌上快速搜索时,我发现此question..。现在因为我是个彻头彻尾的笨蛋,我不明白答案。
我能做些什么来解决这些错误?无论是防止SSL上的超时还是TLS上的其他超时。
编辑:我没有问题发送电子邮件和MessageException
不是我的问题所以请停止回答。
发布于 2015-07-10 18:19:23
据我所知,发送电子邮件也有类似的问题。
我将在下面的示例中展示org.springframework.mail.javamail.JavaMailSenderImpl
。基本上,有几种方法可以处理这种情况。您找到的答案也将有效,但它将在JVM级别上有效。我并没有像您所发现的那样停止使用JVM方法。
添加主机(例如,让我们看看gmail主机:smtp.gmail.com
)。通过将主机添加到trusted -一切都开始按预期工作。在我的示例中,我必须将此主机添加到Part of spring xml configuration
${mail.transport.protocol}
${mail.smtp.auth}
${mail.smtp.starttls.enable}
${mail.smtp.ssl.trust}
Properties file
mail.host=smtp.gmail.com
mail.port=587
mail.username=user@gmail.com
mail.password=password
mail.transport.protocol=smtp
mail.smtp.auth=true
mail.smtp.starttls.enable=true
mail.smtp.ssl.trust=smtp.gmail.com
考虑到你应该给予适当的权限在以下情况下gmail从安全控制台
你有没有机会尝试一下下面的代码,这些代码来自Apache通用电子邮件:
Email email = new SimpleEmail();
email.setHostName("smtp.googlemail.com");
email.setSmtpPort(465);
email.setAuthenticator(new DefaultAuthenticator("username", "password"));
email.setSSLOnConnect(true);
email.setFrom("user@gmail.com");
email.setSubject("TestMail");
email.setMsg("This is a test mail ... :-)");
email.addTo("foo@bar.com");
email.send();
发布于 2019-02-14 13:35:39
Email email = new SimpleEmail();
...
// add this line
email.getMailSession().getProperties().put("mail.smtp.ssl.trust", "smtp.gmail.com");
...
email.send();
发布于 2015-07-10 18:21:50
使用1.5.0-b01版本的库javax.mail,你会发现有一种简单的方法可以避免这种错误。这是我以前用过的一个例子,它工作得很好:
Properties props = new Properties();
MailSSLSocketFactory socketFactory = new MailSSLSocketFactory();
socketFactory.setTrustAllHosts(true);
props.put("mail.imaps.ssl.socketFactory", socketFactory);
如果你使用的是maven,你可以添加这个依赖:
javax.mail
mail
1.5.0-b01
https://stackoverflow.com/questions/31338015
复制相似问题