java邮件发送不成功_(转)解决jdk1.8中发送邮件失败(handshake_failure)问题

  • Post author:
  • Post category:java


暑假在家做一个类似知乎的问答型网站(代码可见:Github/wenda 喜欢的可以给个star或者自己fork然后修改,目前功能还未很完善),其中有一个站内邮件通知系统(这里简单的讲一个例子:如果用户登录的时候出现异常,那么就会通过邮件发送通知用户)。然而却碰到一个问题。问题错误信息如下:

发送邮件失败Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 465;

nested exception is:

javax.net.ssl.SSLHandshakeException: Received fatal alert:

handshake_failure. Failed messages: javax.mail. MessagingException:

Could not connect to SMTP host: smtp.qq.com, port: 465;

nested exception is: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

自己在将错误信息代码google了一下,找了很久发现很多解决方案,包括stackoverflow上的一些解决方案,但还是没用。然后呢用百度试了下,结果在第一条是开源中国的一篇博客:javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure。

eb155a3b6f0b1b2c107f04ec5a0d3826.png

百度出来的结果

点进去是这样的:(如下图)

cc70f0012dcd57c5e3b6883b1edf5f77.png

开源中国

093a7f78bb68073621e7805493728727.png

正确解决方式

结果就是:这个问题是jdk导致的,jdk1.8里面有一个jce的包,安全性机制导致的访问https会报错,官网上有替代的jar包,如果替换掉就可以了。问题的解决方法还可以就是在整个项目中把你的jdk换成是1.7去,同样也可以解决这个我问题。这两个jar包的下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

2c636a1e1b8faba9ecdad423fa343b41.png

包下载

然后下载之后,把这个压缩文件解压,得到两个jar包去覆盖jdk安装目录下的jre\lib\security\下相同的jar包就能解决java8的邮件发送问题。接着用QQ邮箱我亲测有用,但是要注意一点就是:开启SMTP服务后要记得将你的16位授权码作为你的qq邮箱登录密码。

MailSender.java中mailSender.setPassword(“16位授权码”);

mailSender.setHost(“smtp.qq.com”);

mailSender.setPort(465);

578bbd020ae0b3f7e2a10d7e7d1948fe.png

开启服务注意的地方



版权声明:本文为weixin_33664286原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。