我有一个使用spring-boot的项目并添加了 build.gradle中的以下依赖项:
compile group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '1.5.7.RELEASE'
我的application.properties包含
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。
我现在想在服务类
中使用邮件程序@Autowired
private JavaMailSender emailSender;
[...]
@Value("${spring.mail.host}")
private String mailHost;
当我尝试使用emailSender发送邮件时,我收到以下错误:
邮件服务器连接失败;嵌套异常是 com.sun.mail.util.MailConnectException:无法连接到主机, port:localhost,25;超时-1;嵌套异常是: java.net.ConnectException:连接被拒绝:连接。失败 消息:com.sun.mail.util.MailConnectException:无法连接 host,port:localhost,25;超时-1;嵌套异常是: java.net.ConnectException:连接被拒绝:连接
显然它正在尝试连接到localhost而不是配置的主机。 变量mailHost确实包含正确的值,因此读取的属性是正确的。
编辑: emailSender的自动连接类是org.springframework.mail.javamail.JavaMailSenderImpl,这对我来说似乎是正确的。
答案 0 :(得分:1)
就我而言,原因是我自己实例化了这个bean:
@Bean
public JavaMailSender mailSender() throws IOException {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setDefaultEncoding("UTF-8");
return mailSender;
}
不确定原因,但这样会忽略application.properties
。也许原因是,我明确地实例化了JavaMailSender Impl 以设置默认编码,并且可能该实现不是application.properties
知道的?
然而,删除该bean解决了这个问题。
答案 1 :(得分:0)
[FOUND] 一位同事正在研究同样的问题并提交了一个不完整的bean定义。那豆是自动装配的。