问题1: 最近QQ邮箱发布了一个重要公告“SMTP/IMAP即将启用SSL/TLS加密”。启用后导致邮箱服务发送失败
Caused by: cn.hutool.extra.mail.MailException: AuthenticationFailedException: 530 Login fail. A secure connection is requiered(such as ssl). More information at https://help.mail.qq.com/detail/0/1010
at cn.hutool.extra.mail.Mail.send(Mail.java:398)
at cn.hutool.extra.mail.MailUtil.send(MailUtil.java:416)
at cn.hutool.extra.mail.MailUtil.send(MailUtil.java:143)
at cn.hutool.extra.mail.MailUtil.send(MailUtil.java:126)
at cn.hutool.extra.mail.MailUtil.send(MailUtil.java:67)
at com.ruoyi.quartz.task.BidsTask.sendEmail(BidsTask.java:260)
at com.ruoyi.quartz.task.BidsTask.getBids(BidsTask.java:78)
... 10 common frames omitted
Caused by: javax.mail.AuthenticationFailedException: 530 Login fail. A secure connection is requiered(such as ssl). More information at https://help.mail.qq.com/detail/0/1010
at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:826)
at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:761)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:685)
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:412)
at cn.hutool.extra.mail.Mail.send(Mail.java:390)
... 16 common frames omitted
解决1: 我开启了使用SSL安全连接发送邮件,这里我使用的Hutool的邮件工具进行发送
# 邮件服务器的SMTP地址,可选,默认为smtp.<发件人邮箱后缀>
host = smtp.qq.com
# 发件人(必须正确,否则发送失败)
from = xxxxxxxxxx@qq.com
# 邮件服务器的SMTP端口,可选,默认25
port = 465
# 密码(注意,某些邮箱需要为SMTP服务单独设置密码,详情查看相关帮助)
pass = xxxxxxxxxxx
# 使用SSL安全连接,SSL使用端口465,STARTTLS使用587
sslEnable = true
问题2: 开启ssl后仍然报错,错误的意思是没有合适的协议(协议被禁用或密码套件不合适)
注:jdk版本为17.0.12
Caused by: cn.hutool.extra.mail.MailException: MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 465
at cn.hutool.extra.mail.Mail.send(Mail.java:398)
at cn.hutool.extra.mail.MailUtil.send(MailUtil.java:416)
at cn.hutool.extra.mail.MailUtil.send(MailUtil.java:143)
at cn.hutool.extra.mail.MailUtil.send(MailUtil.java:126)
at cn.hutool.extra.mail.MailUtil.send(MailUtil.java:67)
at com.ruoyi.quartz.task.BidsTask.sendEmail(BidsTask.java:260)
... 10 common frames omitted
Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 465
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:412)
at cn.hutool.extra.mail.Mail.send(Mail.java:390)
... 15 common frames omitted
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
at java.base/sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:172)
at java.base/sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:103)
at java.base/sun.security.ssl.TransportContext.kickstart(TransportContext.java:247)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:448)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:426)
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)
... 23 common frames omitted
解决2: 修改java安装目录jdk\conf\security\java.security文件,删除SSLv3, TLSv1, TLSv1.1
# 修改前
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, DTLSv1.0, RC4, DES, \
MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL
# 修改后
jdk.tls.disabledAlgorithms=DTLSv1.0, RC4, DES, \
MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL