springboot java mail sender郵件發送配置


 

轉:

springboot java mail sender郵件發送超時

 

springboot java mail sender郵件發送超時
西門吹雪碧 2020-10-10 11:18:55 751 收藏
版權

正常來說,發送郵件在本地發送走25端口都不會有問題,但是部署到linux環境就失敗?看過很多博主寫的,大多相互抄襲,不妨看看下面的解決方案吧。
1. 有關 SpringBoot 郵件服務

Spring Framework 自己有一套基於 JavaMail 的郵件服務包 org.springframework.mail,並通過 JavaMailSender 接口提供了一種簡易的發送郵件的方式。這樣,開發人員就可以不用操心底層的郵件系統,使用 Spring 提供的接口即可方便地使用郵件服務。官方文檔:https://docs.spring.io/spring/docs/5.0.10.RELEASE/spring-framework-reference/integration.html#mail

而在 SpringBoot 中,提供了更為簡便的自動配置,又進一步簡化了開發人員工作。官方文檔:https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/htmlsingle/#boot-features-email 。下面介紹一下 SpringBoot 中配置郵件服務的具體方法。
2. 具體操作
2.1 添加 Maven 依賴

想要使用 SpringBoot 的郵件服務,需要依賴 spring-boot-starter-mail。所以在 pom 中添加依賴。

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>

2.2 配置 yml

 

 


一定要注意的點是,25接口有可能被運營商封了,為了驗證,可以使用命令 telnet smtp.163.com 25,測試接口是否是可聯通的。

如果不行,我們考慮使用465接口,該接口需要ssl證書驗證,因此需要做一些權限相關的配置。具體為:starttls、socketFactory下的配置。

    host: 為郵件服務的地址。一般在郵箱設置中可以看到。
    port: 端口號。不同的服務商端口號可能不同,這個也需要自行查看。
    username: 為登錄郵箱的用戶名。
    password: 這個不是郵箱登錄密碼,而是第三方授權碼。在郵箱設置中或者幫助文檔中會有介紹,需要開通第三方授權。
    properties: 其它參數。如果需要使用 SSL 方式,需要配置 mail.smtp.starttls.enable 為 true。有關詳細的參數說明見文檔https://javaee.github.io/javamail/#Development_Releases

有關 SpringBoot 中 auto-configuration 的參數見源碼:
————————————————
版權聲明:本文為CSDN博主「西門吹雪碧」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/sduliding/article/details/108993306

 

轉:

JavaMail 發送郵件阻塞問題解決——設置 smtp 超時時間

 

背景

最近發現項目中有關發送郵件的模塊偶爾會阻塞住,導致整個線程阻塞。詭異的是沒有捕獲到任何異常日志,程序莫名其妙就卡在了 sendMail 上。

后來想到發送郵件的內容過大,可能由於這個原因導致,所以找了一下有關 JavaMail 超時設置的資料。現做整理,順便聊聊一些小坑。

JavaMail smtp 超時參數

參數 類型 描述
mail.smtp.connectiontimeout int Socket connection timeout value in milliseconds. This timeout is implemented by java.net.Socket. Default is infinite timeout.
mail.smtp.timeout int Socket read timeout value in milliseconds. This timeout is implemented by java.net.Socket. Default is infinite timeout.
mail.smtp.writetimeout int Socket write timeout value in milliseconds. This timeout is implemented by using a java.util.concurrent.ScheduledExecutorService per connection that schedules a thread to close the socket if the timeout expires. Thus, the overhead of using this timeout is one thread per connection. Default is infinite timeout.

源自 JavaMail API,文末有鏈接。

參數簡介

  • mail.smtp.connectiontimeout:連接時間限制,單位毫秒。是關於與郵件服務器建立連接的時間長短的。默認是無限制。
  • mail.smtp.timeout:郵件接收時間限制,單位毫秒。這個是有關郵件接收時間長短。默認是無限制。
  • mail.smtp.writetimeout:郵件發送時間限制,單位毫秒。有關發送郵件時內容上傳的時間長短。默認同樣是無限制。

大部分博客、資料都提到了前兩個屬性,而容易忽略最后一個。因為我是用來發送郵件的,所以上傳郵件的內容過大是導致發送模塊阻塞的原因。而設置 writetimeout 時間后,再超時時就會報異常,捕獲處理下就可以了。

在 SpringBoot 中的配置

我所用的是 SpringBoot 工程,之前也發表過一篇有關 SpringBoot 配置郵件的博客:SpringBoot 配置郵件服務

只需要在原有配置的基礎上,加上如下設置即可。

 
spring:
mail:
properties:
mail:
smtp:
timeout: 10000
connectiontimeout: 10000
writetimeout: 10000

站在前人的肩膀上前行,感謝以下資料的支持。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM