Spring Boot注册发验证邮件遇MailSendException:无法连接localhost:25
问题排查与解决方案
核心原因:配置未被Spring Boot正确加载
你的application.yml中邮件配置缺少spring前缀,且部分属性键名不符合Spring Boot邮件配置规范,导致JavaMailSender使用默认的localhost:25连接参数,而非你配置的Gmail SMTP信息。
1. 修正配置文件结构
将邮件配置调整为Spring Boot标准格式:
spring: mail: host: smtp.gmail.com port: 587 username: smth@gmail.com password: 你的应用密码 # 注意:Gmail开启2FA后需用应用密码,而非原账号密码 properties: mail: smtp: auth: true starttls: enable: true
- 必须添加
spring前缀,Spring Boot才能识别并加载这些配置到JavaMailSender - 原配置中的
smtpAuth、starttlsEnabled需调整为嵌套在spring.mail.properties.mail.smtp下的标准键名
2. 验证配置类绑定正确性
确保MailConfigurationProperties使用了正确的前缀注解,否则无法读取配置值:
@ConfigurationProperties(prefix = "spring.mail") public class MailConfigurationProperties { // 对应host、port、username、password等属性字段 }
同时在启动类上添加@EnableConfigurationProperties(MailConfigurationProperties.class)启用配置绑定。
3. Gmail SMTP额外要求
- 应用密码:若Gmail账号开启了两步验证,必须使用应用密码替代原密码(可在Google账号设置的"应用密码"页面生成)
- 低安全应用访问(可选):未开启两步验证的账号,需在Gmail设置中开启"不太安全的应用访问"(该选项已逐步被Google淘汰,优先推荐使用应用密码)
4. 确认配置生效
在EmailService中添加日志打印,验证JavaMailSender的实际配置:
// 在sendEmail方法开头添加 logger.info("当前邮件服务器: {}:{}", mailSender.getJavaMailProperties().getProperty("mail.smtp.host"), mailSender.getJavaMailProperties().getProperty("mail.smtp.port"));
若打印结果为smtp.gmail.com:587,说明配置已正确加载。
内容的提问来源于stack exchange,提问作者gigi
相关产品推荐
相关产品推荐

