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 ,不建议随便开启,正常程序应该都不是离开了邮件,就愿意舍弃 整个服务的。
能耍的时候就一定要耍,不能耍的时候一定要学。
--天道酬勤,贵在坚持posted on 2020-02-03 15:32 zhangyukun 阅读(3291) 评论(0) 编辑 收藏 举报