报错全图:

 

 

项目基本环境:

springBoot-2.3.12.RELEASE

jdk1.8

先声明,我没有使用springboot集成邮箱的组件,而是直接引入了javaMail,使用的公司邮箱而非QQ,网易之类的邮箱。

邮箱配置:

mail.smtp.host=mail.xxxxx.com
mail.smtp.auth=true
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
mail.smtp.socketFactory.fallback=false
mail.smtp.port=465
mail.smtp.socketFactory.port=465
mail.transport.protocol=smtp

这个问题的出现,就很怪。

首先就去度娘上寻找解决方法。

有的说在javaMail初始化方法里加上这个就能解决:

 

我兴高采烈地以为抓住了救命稻草,激动地在代码加上这段代码。

一运行,再次发送。

然而...并没有成功。

附上代码:

try {
// SSL认证,注意邮箱是基于SSL加密的,所有需要开启才可以使用,很多人不成功是因为漏写了下面的代码
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.socketFactory", sf);
properties.setProperty("mail.smtp.ssl.enable", "true");
} catch (GeneralSecurityException e) {
log.error("SSL认证异常", e);
}

在这里有的同伴使用上面的方法,解决了问题,可能是我的问题比较顽劣。

还得继续解决,我接着百度。

有的说端口号可能没对应,试了之后依然没有用。找网络组的同事询问,端口是465无疑。

(有的人使用非公司邮箱,遇到了端口的问题,解决之后可以发送了。遇到问题的小伙伴也可能是这个问题。)

 

而我不是端口的问题。

有人说是jdk的安全策略的问题,需改修改security里面的文件。

我试了还是不行,不知道大伙可不可以。

 

继续探寻,有人说是引入jar包版本的问题,可能是版本过低。

于是我去maven中央仓库去查询jar包的最新依赖,发现最新的版本是1.4.7

 

 于是换成最新的jar重新,发送一次。

结果....。

还没成功。

这个时候,我突然发现一个问题。网上有的说最新版本是1.6.2。但maven中央仓库中确实只到1.4.7。

奇怪了!

和另一个项目组的同事,一对比发现,我引入的依赖是不科学的jar。这个不科学不是说这个jar就不行了,而是这个jar身上具有古老沧桑的气息。

应该使用:

<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
</dependency>

我惊奇,可能发现问题根本所在了,把依赖替换。最新版本确实是1.6.2。

然后,再次发送邮件。

成功了!!!

至此,弄到最后原来是引入依赖的问题导致的。

希望能帮助同样问题的同伴。

 

2023-10-25补充:最近发现邮件又发送不成功了。

项目进行了迁移,jdk版本和之前使用的不一样,架构组给安装的jdk版本是jdk1.7.0_280。然后出现了邮件发送失败的问题。

这个发送失败,还有脾气。启动项目之后,发送邮件能发送成功,但过了一段时间就发送失败了。

我去oracle官网查看了一下jdk1.7的最高版本发现是1.7.0_80,并没有jdk1.7.0_280。

所以我把jdk换成了1.7.0_80,然后把security里面的文件文件替换,之后就发送成功了,而且没有出现发送失败的情况。

 

 

 

~~~~~~~~~~可以忽略~~~~~~~~~~~~~

发现一个不错的chatGPT网站,方便易用。

点击直达

posted on 2022-06-29 10:00  之之小侠  阅读(566)  评论(1编辑  收藏  举报