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  阅读(3256)  评论(0编辑  收藏  举报

导航