javamail發(fā)送qq郵箱失敗的原因及解決
javaMail報錯:Unsupported or unrecognized SSL message
c.n.m.service.impl.EmailServiceImpl : 郵件發(fā)送異常, 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端口
坑點:官方文檔發(fā)送郵件服務(wù)器: smtp.qq.com,使用SSL,端口號465或587,其實是使用SSL用465,使用TLS使用587,不能混用,特別是JavaMail在設(shè)置Properties屬性的時候需要指定使用哪一種協(xié)議,不能用混,否則報錯QQ郵箱SMTP/IMAP服務(wù)

比如說我配置的是郵箱服務(wù)器是 smtp.qq.com:587,但是JavaMail的Properties設(shè)置的是
javaMailProperties.put(“mail.smtp.starttls.enable”, “true”);則會報上述錯,因為協(xié)議不匹配,必須使用465端口

總結(jié)
“mail.smtp.ssl.enable”和“mail.smtp.starttls.enable”是JavaMail郵件發(fā)送配置中的兩個不同參數(shù),它們的區(qū)別主要在于使用的加密協(xié)議
mail.smtp.ssl.enable:這個參數(shù)用于啟用SSL(Secure Sockets Layer)加密協(xié)議。當設(shè)置為true時,郵件傳輸將通過一個SSL連接進行,這通常意味著使用465端口。SSL協(xié)議在建立連接后立即加密數(shù)據(jù)流,適用于那些要求全加密通信的SMTP服務(wù)器。
mail.smtp.starttls.enable:這個參數(shù)用于啟用TLS(Transport Layer Security)加密協(xié)議。當設(shè)置為true時,郵件傳輸將通過一個開始時未加密的連接進行,然后在傳輸過程中升級為TLS加密,這通常意味著使用587端口。TLS協(xié)議是在數(shù)據(jù)傳輸之前建立一個加密層,適用于那些提供明文連接然后升級到加密通信的SMTP服務(wù)器。
總的來說,mail.smtp.ssl.enable和mail.smtp.starttls.enable都是用于郵件加密的配置項,但它們分別對應(yīng)不同的加密方式和端口。如果SMTP服務(wù)器支持SSL,則應(yīng)配置mail.smtp.ssl.enable;如果SMTP服務(wù)器支持TLS,則應(yīng)配置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;
}到此這篇關(guān)于javamail發(fā)送qq郵箱失敗的原因及解決的文章就介紹到這了,更多相關(guān)javamail發(fā)送qq郵箱內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何構(gòu)建可重復(fù)讀取inputStream的request
這篇文章主要介紹了如何構(gòu)建可重復(fù)讀取inputStream的request,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
windows如何使用bat腳本后臺啟動/停止和重啟jar包服務(wù)
這篇文章主要介紹了windows使用bat腳本后臺啟動/停止和重啟jar包服務(wù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11
SpringBoot集成Swagger2實現(xiàn)Restful(類型轉(zhuǎn)換錯誤解決辦法)
這篇文章主要介紹了SpringBoot集成Swagger2實現(xiàn)Restful(類型轉(zhuǎn)換錯誤解決辦法),需要的朋友可以參考下2017-07-07
Java8中創(chuàng)建Stream流的幾種常見方式
在Java 8中,??Stream?? API 是一種新的處理數(shù)據(jù)的方式,它允許以聲明式的方式來處理數(shù)據(jù)集合,本文將詳細介紹在Java 8中創(chuàng)建 ??Stream?? 流的幾種常見方式,大家可以根據(jù)需要進行選擇2025-05-05
SpringBoot項目jar發(fā)布后如何獲取jar包所在目錄路徑
這篇文章主要介紹了SpringBoot項目jar發(fā)布后如何獲取jar包所在目錄路徑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11

