問(wèn)題現(xiàn)象: 1、smtp請(qǐng)求郵件服務(wù)器發(fā)送郵件,配置了郵件服務(wù)器地址和465端口 2、抓包發(fā)現(xiàn)在建TCP3次握手動(dòng)作之后,客戶端請(qǐng)求連接達(dá)到30s,然后主動(dòng)中斷連接,詳見(jiàn)下圖 3、java代碼中報(bào)錯(cuò)如下: 分析過(guò)程: 1、懷疑網(wǎng)絡(luò)問(wèn)題 通過(guò)使用curl命令檢查,發(fā)現(xiàn)客戶端和郵件服務(wù)器網(wǎng)絡(luò)通暢,不存在網(wǎng)絡(luò)問(wèn)題,詳見(jiàn)smtp報(bào)文分析(25、465、587端口)_Steven-Russell的博客-CSDN博客 2、發(fā)現(xiàn)客戶端主動(dòng)中斷連接,并且達(dá)到30s之后中斷,那么極有可能時(shí)觸發(fā)了客戶端的smtp超時(shí),檢查smtp配置 mail.smtp.timeout = 30000,恰好佐證了想法 3、通過(guò)添加 smtp 的debug配置,mail.debug=true ,打印出debug日志 4、排查日志,發(fā)現(xiàn)isSSL=false 5、反觀465端口時(shí)smtp的ssl交互端口,那么和isSSL=false不就矛盾了嗎? 6、檢查代碼,配置 mail.smtp.ssl.enable 改為true,重新運(yùn)行程序,發(fā)現(xiàn)郵件發(fā)送成功。 綜上可知,問(wèn)題根因: 1、465是smtp的ssl安全端口,所以使用javamail時(shí)必須有如下配置: properties.put("mail.smtp.ssl.enable", "true"); // 默認(rèn)值為false 2、一定要仔細(xì)排查前述配置是否因?yàn)榇a分支不同,導(dǎo)致設(shè)置為false,或者默認(rèn)值為false
注意:此處因?yàn)榉?wù)器配置smtps端口是465,方才有上述結(jié)論,若是手動(dòng)配置了其他端口作smtps的安全端口,同理需要?properties.put("mail.smtp.ssl.enable", "true");文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-484146.html
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-484146.html
到了這里,關(guān)于smtp 通過(guò)465端口發(fā)送郵件失敗的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!