javamail发送qq邮箱失败的原因及解决

 更新时间:2024年04月30日 08:30:41   作者:Mr朱墨  
本文主要介绍了javamail发送qq邮箱失败的原因及解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

原因分析: 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;
    }

到此这篇关于javamail发送qq邮箱失败的原因及解决的文章就介绍到这了,更多相关javamail发送qq邮箱内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java实现合并图片的方法示例

    java实现合并图片的方法示例

    这篇文章主要介绍了java实现合并图片的方法,结合具体实例形式分析了java基于图片的读取、设置、生成等操作实现图片合并功能的相关实现技巧,需要的朋友可以参考下
    2017-02-02
  • IDEA中properties与yml文件的转变方式

    IDEA中properties与yml文件的转变方式

    文章介绍了如何在IntelliJ IDEA 2021.1.1中安装和使用ConvertYAMLandPropertiesFile插件进行YAML和Properties文件之间的转换,安装步骤包括导航到设置、安装插件、找到并安装插件等,插件支持从Properties文件转换为YAML文件,但转换过程中会丢失注释
    2024-12-12
  • Java Http接口加签、验签操作方法

    Java Http接口加签、验签操作方法

    下面小编就为大家带来一篇Java Http接口加签、验签操作方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • Java中的密码加密方式

    Java中的密码加密方式

    文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固定,且不容易发生碰撞,此外,通过加盐和多重加密,可以进一步增加密码的复杂性和安全性
    2025-01-01
  • SpringBoot通过ThreadLocal实现登录拦截详解流程

    SpringBoot通过ThreadLocal实现登录拦截详解流程

    这篇文章主要介绍了SpringBoot(HandlerInterceptor)+ThreadLocal实现登录拦截,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • SpringBoot集成整合JWT与Shiro流程详解

    SpringBoot集成整合JWT与Shiro流程详解

    安全管理是软件系统必不可少的的功能。根据经典的“墨菲定律”——凡是可能,总会发生。如果系统存在安全隐患,最终必然会出现问题,这篇文章主要介绍了SpringBoot集成JWT、Shiro框架的使用
    2022-12-12
  • 浅谈Java锁机制

    浅谈Java锁机制

    在多线程环境下,程序往往会出现一些线程安全问题,为此,Java提供了一些线程的同步机制来解决安全问题,比如:synchronized锁和Lock锁都能解决线程安全问题。下面小编就来详细介绍该知识点,需要的朋友可以参考一下
    2021-09-09
  • SpringCloud 微服务数据权限控制的实现

    SpringCloud 微服务数据权限控制的实现

    这篇文章主要介绍的是权限控制的数据权限层面,意思是控制可访问数据资源的数量,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • 详解Spring Boot中如何自定义SpringMVC配置

    详解Spring Boot中如何自定义SpringMVC配置

    这篇文章主要给大家介绍了关于Spring Boot中如何自定义SpringMVC配置的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09
  • 在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

    在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

    本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比了原始的set方法和构造方法,展示了如何使用ModelMapper进行动态属性映射,从而减少手动编写转换代码的工作量,通过示例代码,展示了如何使用GeoTools读取Shapefile属性并将其转换为JavaBean对象
    2025-02-02

最新评论