spring-mail-starter忽略spring.mail。* config

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring-mail-starter忽略spring.mail。* config相关的知识,希望对你有一定的参考价值。

我有一个使用spring-boot的项目,并在build.gradle中添加了以下依赖项:

compile group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '1.5.7.RELEASE'

我的application.properties包含

SMTP配置

spring.mail.host=mail.xxx
spring.mail.port=587
spring.mail.username=donotreply@xxx
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.from=donotreply@xxx

根据我发现的多个答案和我发现的文档,这应该足以用这个设置创建bean。

我现在想在Service类中使用邮件程序

@Autowired
private JavaMailSender emailSender;
[...]

@Value("${spring.mail.host}")
private String mailHost;

当我尝试使用emailSender发送邮件时,我收到以下错误:

邮件服务器连接失败;嵌套异常是com.sun.mail.util.MailConnectException:无法连接到主机,端口:localhost,25;超时-1;嵌套异常是:java.net.ConnectException:连接被拒绝:连接。失败的消息:com.sun.mail.util.MailConnectException:无法连接到主机,port:localhost,25;超时-1;嵌套异常是:java.net.ConnectException:连接被拒绝:连接

显然它正在尝试连接到localhost而不是配置的主机。变量mailHost确实包含正确的值,因此读取的属性是正确的。

编辑:emailSender的自动连接类是org.springframework.mail.javamail.JavaMailSenderImpl,这似乎对我来说是正确的。

答案

在我的情况下,原因是我自己像这样实例化bean:

@Bean
public JavaMailSender mailSender() throws IOException {
    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
    mailSender.setDefaultEncoding("UTF-8");
    return mailSender;
}

不知道为什么,但这样,它忽略了application.properties。也许原因是,我明确地实例化了JavaMailSenderImpl以设置默认编码,并且可能该实现不是application.properties意识到的?

但是,删除该bean解决了这个问题。

另一答案

[FOUND]一位同事正在研究同样的问题并提交了一个不完整的bean定义。那豆是自动装配的。

以上是关于spring-mail-starter忽略spring.mail。* config的主要内容,如果未能解决你的问题,请参考以下文章

IE 中的 Spry 菜单栏

Javascript之spry菜单栏

spriing boot 实战

用PHP实现Spry中的随机XML记录

4.spriing:Bean的生命周期/工厂方法配置Bean/FactoryBean

java ssm 后台框架平台 项目源码 websocket 即时通讯 IM quartz spri