• Unrecognized SSL message, plaintext connection?


    前言

    昨天快下班了,一同事在群里发了一个异常日志,内容如下

    1. 发送邮件失败:{}
    2. javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
    3. at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:710)
    4. at sun.security.ssl.InputRecord.read(InputRecord.java:527)
    5. at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
    6. at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
    7. at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
    8. at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
    9. at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:619)
    10. at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:393)
    11. at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:217)
    12. at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2160)
    13. at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:726)
    14. at javax.mail.Service.connect(Service.java:366)

    报错日志是一个发送邮件功能,他怀疑是不是邮件内容中包含了转义字符,导致有的邮件可以正常发送,有的邮件发送失败。

    问题本质

    看这异常日志,像是SSL解析问题,涉及邮件发送的服务之前都升级为SSL了,服务都已经上线了,发送邮件相关代码理论上是没问题的,后来想到邮件发送的25端口和465端口,报着试试的态度,去集成环境服务器上查看了下邮件服务器的配置,真相大白了,66服务器上邮箱端口居然是25的,而169服务器上的端口是465的,服务端两个节点,请求在两个节点上轮询,这就解释了,为啥有的邮件发送是ok的。显然将25端口改为465就ok了。

    在排查问题的时候,经常会出现偶现问题,这时候就要考虑环境的是否有多节点,节点环境、配置是否一致。之前还出现过mq配置错的,测试环境的mq消费了集成环境的消息问题,所以在排查问题的时候要冷静,要看异常日志的实际报错信息,从而再排查问题。

    具体邮件支持SSL相关信息,可以查看邮件发送工具类

  • 相关阅读:
    手把手教你写一个JSON在线解析的前端网站1
    (免费分享)基于springboot博客系统
    Sprites and textures
    Edge浏览器如何简单用上ChatGPT
    PGL图学习之基于UniMP算法的论文引用网络节点分类任务[系列九]
    docker安装教程
    序章 调度系统架构设计总述
    JDBC中对象的解释和statement对象详解
    python入门与实战--字符串
    【C++STL】string类
  • 原文地址:https://blog.csdn.net/qq_28165595/article/details/125568519