本地代码无问题邮件却发送失败的问题
项目场景:
通过hutool写一段邮件发送代码,发现总是发送失败,并且报错:
问题描述:
当时我的代码是这样写的:
public static void main(String[] args) {MailSenderVo mailSenderVo = new MailSenderVo();mailSenderVo.setHost("smtp.exmail.qq.com");mailSenderVo.setPort(465);mailSenderVo.setAuth(true);mailSenderVo.setFrom("开启了smtp的代理邮箱");mailSenderVo.setUser("开启了smtp的代理邮箱");mailSenderVo.setPass("代理邮箱开启SMTP的时候获取的密码");mailSenderVo.setSslEnable(true);String subject = "邮件标题";String content = "邮件正文内容";try {log.info("邮件开始发送!");MailUtil.send(mailSenderVo, "要发送的目标邮箱地址", subject, content, false);log.info("邮件发送成功!");} catch (Exception e) {log.error(e.getMessage());}}
报的错打印出来是这样的:
MessagingException: Could not connect to SMTP host: smtp.exmail.qq.com, port: 465
原因分析:
一开始怀疑是我的SSL配置没有改成true,百度了很多解决方案也都是说报这个错是因为这个ssl协议没有配置成true导致465访问不通,但是我的确配置的是true啊!!!!!!!真让人头大!
但是!突然定睛一看,我发现我把错误try catch住了,打印出来的错误未必是真正的错误,或许是这个错误的父类。
解决方案:
public static void main(String[] args) {MailSenderVo mailSenderVo = new MailSenderVo();mailSenderVo.setHost("smtp.exmail.qq.com");mailSenderVo.setPort(465);mailSenderVo.setAuth(true);mailSenderVo.setFrom("开启了smtp的代理邮箱");mailSenderVo.setUser("开启了smtp的代理邮箱");mailSenderVo.setPass("代理邮箱开启SMTP的时候获取的密码");mailSenderVo.setSslEnable(true);String subject = "邮件标题";String content = "邮件正文内容";
// try {log.info("邮件开始发送!");MailUtil.send(mailSenderVo, "要发送的目标邮箱地址", subject, content, false);log.info("邮件发送成功!");
// } catch (Exception e) {// log.error(e.getMessage());
// }}
我把try catch去掉后,用main方法直接运行这段代码,真正的报错出现了!
- 邮件开始发送!
Exception in thread "main" cn.hutool.extra.mail.MailException: MessagingException: Could not connect to SMTP host: smtp.exmail.qq.com, port: 465at cn.hutool.extra.mail.Mail.send(Mail.java:359)at cn.hutool.extra.mail.MailUtil.send(MailUtil.java:395)at cn.hutool.extra.mail.MailUtil.send(MailUtil.java:191)at cn.hutool.extra.mail.MailUtil.send(MailUtil.java:173)at cn.hutool.extra.mail.MailUtil.send(MailUtil.java:158)at cn.net.cfss.fgbp.face.unifiedapi.service.collectionApplets.Collection10015Service.main(Collection10015Service.java:128)
Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.exmail.qq.com, port: 465;nested exception is:javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961)at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)at javax.mail.Service.connect(Service.java:317)at javax.mail.Service.connect(Service.java:176)at javax.mail.Service.connect(Service.java:125)at javax.mail.Transport.send0(Transport.java:194)at javax.mail.Transport.send(Transport.java:124)at cn.hutool.extra.mail.Mail.doSend(Mail.java:373)at cn.hutool.extra.mail.Mail.send(Mail.java:357)... 5 more
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)at sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:171)at sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:101)at sun.security.ssl.TransportContext.kickstart(TransportContext.java:238)at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:394)at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:373)at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:549)at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:354)at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:211)at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)... 13 moreProcess finished with exit code 1
原来是报错:javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)导致最后报错:MessagingException: Could not connect to SMTP host: smtp.exmail.qq.com, port: 465,难怪我一直找不到原因!
然后百度一下这个错误,发现是我本地环境的jdk1.8的配置中禁止了这个SLLv3协议,所以本地发送邮件才会一直报错。
真正的解决方案是:
打开jdk的配置的文件:C:\Program Files\Java\jdk1.8.0_291\jre\lib\security\java.security,找到SSLv3,然后删掉,不让本地JDK禁止这个协议就能发送了。
但是!!!!!!!!!!!!!!!!!
万万没想到啊!
去掉了还是不行,这个时候我陷入了沉思…
然后我一百度发现,
诶,原来sslv3后面还有两个协议是和sslv3是类似的协议TLSv1, TLSv1.1,需要一起删除的!!!!!!!
然后我删除后重启了项目,本地发送邮件果然没问题了~
嗨呀!
本地代码无问题邮件却发送失败的问题相关推荐
- 阿里云 Java发布SpringBoot项目,使用邮件服务发送失败原因整理
查了很多失败原因大致有一下几点: 使用了25端口,阿里云默认是禁用掉25端口的,看看能否通 解决办法:代码配置中指定为465端口 telnet smtp.163.com 25 2.使用465端口,依旧 ...
- 邮件群发平台_为什么初试邮件群发的企业总是发送失败?
邮件群发是企业在经营过程中一种常用手段,不论是大量推送营销信息,还是定期发送节假日祝福,或者是客户注册信息及时响应,都需要用到邮件群发来辅助企业的经营,将企业最新的产品服务信息与客户共享,促进销售增长 ...
- 使用队列think-queue处理邮件的发送
前言:使用的php框架版本为:thinkphp 5.0.24,队列使用的拓展包为:topthink/think-queue:2.0.3,redis版本为 5.0.5. 因为下面提到的队列使用的redi ...
- php邮件发送失败,php服务器发送邮件失败问题解析
在thinkphp上用phpmailer发送邮件. 自己window上的wamp发送正常,邮箱是163的.但是发布到服务器上就一直提示发送失败. 1.如何调试邮件发送错误信息? 复制代码 代码示例: ...
- foxmail邮件加载失败重试_TP5实现邮件发送(PHP 利用QQ邮箱发送邮件「PHPMailer」)...
修改php.ini中的一些配置 extension=php_openssl.dll //前面的分号去掉,allow_url_fopen = Off 改为 allow_url_fopen = On PH ...
- 腾讯企业邮箱外域邮件发送失败原因及其解决方案
腾讯企业邮箱外域邮件发送失败原因及其解决方案 参考文章: (1)腾讯企业邮箱外域邮件发送失败原因及其解决方案 (2)https://www.cnblogs.com/chen110xi/p/465067 ...
- exchange无法收发邮件_MAPI session超过Exchange最大限制,邮件发送失败的终极解决方法...
前言:1.当今世界,Email已经成为一种通用的办公方式,并且是沟通地球村的一座重要桥梁.在使用Email,特别是Outlook收发邮件时,我们经常会碰到邮件发送失败的问题.在这种情况下,我们一般首先 ...
- pop3服务器协议初始化失败,邮件的发送和接收故障处理的几点方法
成天和邮件打交道,难免遇到邮件的发送和接收问题.通常遇到的问题有:网络问题,对方服务器的问题,DNS解析的问题,对方拒绝接收你的邮件等.可以通过以下一些简单的方法,诊断问题的所在: 1)分析NOT D ...
- 邮件发送失败服务器繁忙,★邮件发送失败的原因和解决方法
以下是对发 Hi. This is the PowerMail SMTP Server 1.0 at 72mail.cn . I'm afraid I wasn't able to deliver y ...
最新文章
- Hello Shell
- watchdog应用实例
- arm开发板放张图片动起来_ARM裸机不能正确显示图片的问题
- LaTex 各种特殊符号
- idea编译工程时出现Error:java: 无效的目标发行版: 1.8
- SAP UI5 mock服务器错误排查
- 柔性太阳能电池pdf_房车旅行如何做到电力无忧,那就选择一套合适的太阳能供电系统吧...
- 性能测试十九:jmeter参数优化+排错
- 给 c# 程序员的十个重要提示
- Nginx默认虚拟主机、 Nginx用户认证、Nginx域名重定向、访问日志·····
- gdb调试core文件
- 离散考试题计算机,离散数学试题及答案_离散数学试题库_离散数学试卷及答案...
- Scrapy学习笔记5——Spiders
- 2015 android 5.0 手机排行榜,2015上半年顶级新款Android手机汇总
- 新书封面初稿,征集意见ing【人人都是产品经理:9066】
- wp10手机不能连接微软服务器,Lumia920手机更新10166版WP10后,无法用Microsoft账户登录,也无法添加Microsoft账 - Microsoft Community...
- Linux 6.2:华为代码加速核心功能 715 倍!
- 大动作!中国研发“超级高铁” 理论时速达1000公里
- 滴滴出行与上海交通大学共建联合实验室,加速产学研合作进程
- [WiFi教程] 轻松教你支持ZTE中兴客户端