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

Spring Boot 1.2.5.RELEASE - Sending E-mail via Gmail SMTP

Firstly, I need to say that sending email with 1.2.0.RELEASE works fine

application.properties:

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

pox.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>


After changing parent version to 1.2.5.RELEASE email sending hasn't worked

文档说: 如果 spring.mail.host 和相关库(由 spring-boot-starter-mail 定义)可用,如果 none 存在,则创建默认的 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。
请指出我的错误。

提前致谢

看来是回归了。我创建了 #3624 来调查这个问题。感谢示例项目!

Java 邮件中似乎有 regression/behaviour 变化。 The change 在 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