昨天快下班了,一同事在群里发了一个异常日志,内容如下
- 发送邮件失败:{}
-
- javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
- at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:710)
- at sun.security.ssl.InputRecord.read(InputRecord.java:527)
- at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
- at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
- at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
- at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
- at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:619)
- at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:393)
- at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:217)
- at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2160)
- at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:726)
- at javax.mail.Service.connect(Service.java:366)
报错日志是一个发送邮件功能,他怀疑是不是邮件内容中包含了转义字符,导致有的邮件可以正常发送,有的邮件发送失败。
看这异常日志,像是SSL解析问题,涉及邮件发送的服务之前都升级为SSL了,服务都已经上线了,发送邮件相关代码理论上是没问题的,后来想到邮件发送的25端口和465端口,报着试试的态度,去集成环境服务器上查看了下邮件服务器的配置,真相大白了,66服务器上邮箱端口居然是25的,而169服务器上的端口是465的,服务端两个节点,请求在两个节点上轮询,这就解释了,为啥有的邮件发送是ok的。显然将25端口改为465就ok了。
在排查问题的时候,经常会出现偶现问题,这时候就要考虑环境的是否有多节点,节点环境、配置是否一致。之前还出现过mq配置错的,测试环境的mq消费了集成环境的消息问题,所以在排查问题的时候要冷静,要看异常日志的实际报错信息,从而再排查问题。
具体邮件支持SSL相关信息,可以查看邮件发送工具类