spring boot java mail 導致程序無法啟動問題


<!-- 發送郵件 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-mail</artifactId>
		</dependency>

 

 mail:
    host: smtp.qq.com
    port: 465
    protocol: smtp
    username: XXXXXX@qq.com
    password: ollkrcduszinbhih1
    test-connection: true

  

如果是使用的上面的  這個 spring boot 集成的 郵件配置。 那么會在程序啟動的時候去驗證 郵件密碼。如果驗證不通過,那么程序就會拋出異常無法正常啟動。拋出一下異常。

Mail server is not available
	at org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration.validateConnection(MailSenderValidatorAutoConfiguration.java:55)

 

 

明顯這個驗證是在程序啟動的時候驗證的。 也就是說程序啟動的時候必須要連接騰訊的外網。

 

如果這時候你無法連接外網,或者本來就不允許連接外網,那么你的程序就無法啟動了。

 

這個一個很小的問題,但是因為程序正常啟動,影響其他同事的開發(真實案例,因為這個 授權變化,導致2次后端甚至前端開發任務的暫停 )。

 

 

這個問題要怎么解決呢,

1  首先我想到是和以前一樣,不用spring boot 的集成方式。 直接引入 Javamail 的  maven 依賴,手動初始化。那么就變得可控了。

2 然后,我想了一下,spring boot 為啥要這么 lower  , 在啟動的時候拋出異常,終止程序 啟動呢?

  啟動的時候通過,后面發郵件的時候。授權密碼,也可以被別人改了,發不出去郵件。

  啟動的時候沒有通過授權,啟動以后也可以修正授權,然后郵件就可以發送出去了。

 

終於我看到了一個參數 (抄的別人的配置,沒有仔細看)

test-connection: true

如果這個參數配置為 true ,那么驗證會很嚴格,郵件 認證不通過,就不能啟動。(建議你確認你的程序離開了郵件就無法運行,你如果郵件異常你願意整個服務不啟動才開啟,而且測試環境的沒必要開啟 )
如果這個參數是 false,那么 不會在啟動的時候去驗證。

默認是 false ,不建議隨便開啟,正常程序應該都不是離開了郵件,就願意舍棄 整個服務的。

 


免責聲明!

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



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