当前位置:   article > 正文

javamail发送qq邮箱失败案例分析_unsupported or unrecognized ssl message

unsupported or unrecognized ssl message

javaMail报错:Unsupported or unrecognized SSL message

	c.n.m.service.impl.EmailServiceImpl      : 邮件发送异常, Mail server connection failed; nested exception is javax.mail.MessagingException: Exception reading response;
  nested exception is:
	javax.net.ssl.SSLException: Unsupported or unrecognized SSL message. Failed messages: javax.mail.MessagingException: Exception reading response;
  nested exception is:
	javax.net.ssl.SSLException: Unsupported or unrecognized SSL message
  • 1
  • 2
  • 3
  • 4
  • 5

原因分析: ssl与tls端口

坑点:官方文档发送邮件服务器: smtp.qq.com,使用SSL,端口号465或587,其实是使用SSL用465,使用TLS使用587,不能混用,特别是JavaMail在设置Properties属性的时候需要指定使用哪一种协议,不能用混,否则报错
QQ邮箱SMTP/IMAP服务

在这里插入图片描述
比如说我配置的是邮箱服务器是 smtp.qq.com:587,但是JavaMail的Properties设置的是
javaMailProperties.put(“mail.smtp.starttls.enable”, “true”);则会报上述错,因为协议不匹配,必须使用465端口
在这里插入图片描述

总结

“mail.smtp.ssl.enable”和“mail.smtp.starttls.enable”是JavaMail邮件发送配置中的两个不同参数,它们的区别主要在于使用的加密协议

mail.smtp.ssl.enable:这个参数用于启用SSL(Secure Sockets Layer)加密协议。当设置为true时,邮件传输将通过一个SSL连接进行,这通常意味着使用465端口。SSL协议在建立连接后立即加密数据流,适用于那些要求全加密通信的SMTP服务器。

mail.smtp.starttls.enable:这个参数用于启用TLS(Transport Layer Security)加密协议。当设置为true时,邮件传输将通过一个开始时未加密的连接进行,然后在传输过程中升级为TLS加密,这通常意味着使用587端口。TLS协议是在数据传输之前建立一个加密层,适用于那些提供明文连接然后升级到加密通信的SMTP服务器。

总的来说,mail.smtp.ssl.enable和mail.smtp.starttls.enable都是用于邮件加密的配置项,但它们分别对应不同的加密方式和端口。如果SMTP服务器支持SSL,则应配置mail.smtp.ssl.enable;如果SMTP服务器支持TLS,则应配置mail.smtp.starttls.enable。

 private JavaMailSenderImpl generateMailSender(EmailSendDto emailSendDto) {
        JavaMailSenderImpl currentMailSender = new JavaMailSenderImpl();
        currentMailSender.setHost(emailSendDto.getHost());
        currentMailSender.setPort(Integer.parseInt(emailSendDto.getPort()));
        currentMailSender.setUsername(emailSendDto.getUsername());
        currentMailSender.setPassword(emailSendDto.getPassword());
        currentMailSender.setDefaultEncoding("UTF-8");
        Properties javaMailProperties = new Properties();
        javaMailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        javaMailProperties.put("mail.smtp.auth", "true");
        javaMailProperties.put("mail.smtp.ssl.enable", "true");        // 465端口
//        javaMailProperties.put("mail.smtp.starttls.enable", "true"); // 587端口
        javaMailProperties.put("mail.debug", "true");
        currentMailSender.setJavaMailProperties(javaMailProperties);
        return currentMailSender;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/650948
推荐阅读
相关标签
  

闽ICP备14008679号