首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中使用commons-mail发送电子邮件

在Java中使用commons-mail发送电子邮件
EN

Stack Overflow用户
提问于 2015-07-10 18:03:00
回答 6查看 2.2K关注 0票数 3

所以我试着用Java发送一个代码到我的电子邮件中。我开始使用javax.mail,但记得上次我使用它时遇到了问题,所以我转向了Apache Commons Mail。

不过,我还是收到了一堆错误。在SSL上,我得到一个java.net.SocketTimeoutException在TLS上,我得到了一些错误:

代码语言:javascript
复制
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不是我的问题所以请停止回答。

EN

回答 6

Stack Overflow用户

发布于 2015-07-10 18:19:23

据我所知,发送电子邮件也有类似的问题。

我将在下面的示例中展示org.springframework.mail.javamail.JavaMailSenderImpl。基本上,有几种方法可以处理这种情况。您找到的答案也将有效,但它将在JVM级别上有效。我并没有像您所发现的那样停止使用JVM方法。

应该做什么?

添加主机(例如,让我们看看gmail主机:smtp.gmail.com)。通过将主机添加到trusted -一切都开始按预期工作。在我的示例中,我必须将此主机添加到Part of spring xml configuration

代码语言:javascript
复制
${mail.transport.protocol}
            ${mail.smtp.auth}
            ${mail.smtp.starttls.enable}
            ${mail.smtp.ssl.trust}

Properties file

代码语言:javascript
复制
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通用电子邮件:

代码语言:javascript
复制
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();
票数 2
EN

Stack Overflow用户

发布于 2019-02-14 13:35:39

代码语言:javascript
复制
Email email = new SimpleEmail();
...

// add this line
email.getMailSession().getProperties().put("mail.smtp.ssl.trust", "smtp.gmail.com");

...
email.send();
票数 2
EN

Stack Overflow用户

发布于 2015-07-10 18:21:50

使用1.5.0-b01版本的库javax.mail,你会发现有一种简单的方法可以避免这种错误。这是我以前用过的一个例子,它工作得很好:

代码语言:javascript
复制
Properties props = new Properties();
        MailSSLSocketFactory socketFactory = new MailSSLSocketFactory();
        socketFactory.setTrustAllHosts(true);
        props.put("mail.imaps.ssl.socketFactory", socketFactory);

如果你使用的是maven,你可以添加这个依赖:

代码语言:javascript
复制
javax.mail
  mail
  1.5.0-b01
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31338015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档