Spring Boot 1.2.5.RELEASE - 通过 Gmail SMTP 发送电子邮件

2022-09-02 00:56:45

首先,我需要说的是,使用1.2.0.RELEASE发送电子邮件工作正常

应用程序.属性:

spring.mail.host = smtp.gmail.com
spring.mail.username = *****@gmail.com
spring.mail.password = ****
spring.mail.properties.mail.smtp.auth = true
spring.mail.properties.mail.smtp.socketFactory.port = 465
spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.socketFactory.fallback = false

痘痘.xml

<parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>1.2.0.RELEASE</version>
     <relativePath/>
</parent>

.......

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-mail</artifactId>
</dependency>


将父版本更改为1.2.5.RELEASE后,电子邮件发送不起作用

Docs说:如果spring.mail.host和相关库(由spring-boot-starter-mail定义)可用,如果不存在,则会创建一个默认的JavaMailSender。


所以我添加了

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>

它没有帮助,然后我已经把它换成了

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.5.4</version>
</dependency>

我也试过

spring.mail.host = smtp.gmail.com
spring.mail.username = *****@gmail.com
spring.mail.password = ****
spring.mail.port = 465

结果相同。

手动创建和配置@Bean不是问题。但我想使用Spring Boot的所有美丽。
请指出我的错误。

提前致谢


答案 1

看起来Java Mail中存在回归/行为变化。更改在 1.5.3 和 1.5.4 中。你的应用使用 Boot 1.2.0,因为它使用 Java Mail 1.5.2。它在 Boot 1.2.5 中失败,因为它使用 Java Mail 1.5.4。

1.5.3+中的问题似乎是SMTP传输在端口465上连接,GMail需要SSL握手。Java Mail错误地认为它没有使用SSL,因此它永远不会启动握手并且连接尝试(最终)超时。您可以通过明确使用SSL来说服Java Mail做正确的事情。将以下内容添加到 :application.properties

spring.mail.properties.mail.smtp.ssl.enable = true

答案 2

它看起来像是一种回归。我已创建 #3624 来调查此问题。感谢您的示例项目!


推荐