报错全图:
项目基本环境:
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里面的文件文件替换,之后就发送成功了,而且没有出现发送失败的情况。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现