【问题标题】:spring-mail-starter ignoring spring.mail.* configspring-mail-starter 忽略 spring.mail.* 配置
【发布时间】:2017-10-25 11:30:36
【问题描述】:

我有一个使用 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。

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

@Autowired
private JavaMailSender emailSender;
[...]

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

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

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

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

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

【问题讨论】:

    标签: email spring-boot properties jakarta-mail


    【解决方案1】:

    就我而言,原因是我自己实例化了 bean,如下所示:

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

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

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

    【讨论】:

      【解决方案2】:

      [找到] 一位同事正在做同样的事情,并提交了一个不完整的 bean 定义。那个 bean 是自动装配的。

      【讨论】:

        猜你喜欢
        • 2021-03-11
        • 2018-06-21
        • 2017-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-15
        • 1970-01-01
        相关资源
        最近更新 更多