<!-- 發送郵件 --> <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 ,不建議隨便開啟,正常程序應該都不是離開了郵件,就願意舍棄 整個服務的。