SpringBoot应用通过YAML配置发送邮件失败问题求助
SpringBoot邮件YAML配置端口问题排查与解决
端口25认证失败的解决
端口25多数情况下需要先通过STARTTLS升级连接为加密状态,再进行认证,直接裸连认证会被服务器拒绝。以下是正确的YAML配置:
spring: mail: host: 你的SMTP服务器地址 port: 25 username: 你的邮箱账号 password: 你的邮箱密码/授权码 properties: mail: smtp: auth: true starttls: enable: true required: true
注意:部分企业内部邮件服务器可能限制25端口仅用于内部转发,不允许外部账号认证,这种情况建议直接改用587端口。
端口587提示STARTTLS required的解决
587是SMTP提交端口,强制要求STARTTLS加密,出现该错误说明你的YAML配置中未正确开启STARTTLS。正确配置如下:
spring: mail: host: 你的SMTP服务器地址 port: 587 username: 你的邮箱账号 password: 你的邮箱密码/授权码 properties: mail: smtp: auth: true starttls: enable: true required: true # 可选:添加超时配置避免连接超时 connectiontimeout: 5000 timeout: 5000 writetimeout: 5000
通用排查点
- 检查YAML缩进:YAML对缩进严格,
properties下的mail.smtp层级必须正确对齐,否则配置不会生效。 - 确认密码/授权码:如果是第三方邮箱(如QQ、网易),必须用SMTP授权码而非登录密码;企业邮箱需确认是否开启了SMTP服务权限。
- 公司网络限制:联系运维确认公司主机是否放行25/587端口的出站访问,部分企业防火墙会拦截未授权的SMTP连接。
- 对比VM Options配置:把之前VM Options里的邮件参数(如
-Dspring.mail.smtp.starttls.enable=true)和YAML配置逐一比对,确保没有遗漏关键参数。
测试代码
可以用以下简单代码验证配置是否生效:
@Autowired private JavaMailSender mailSender; public void sendTestMail() { SimpleMailMessage msg = new SimpleMailMessage(); msg.setFrom("你的邮箱@xxx.com"); msg.setTo("测试接收邮箱@xxx.com"); msg.setSubject("YAML配置测试邮件"); msg.setText("配置生效,邮件发送成功"); mailSender.send(msg); }
内容的提问来源于stack exchange,提问作者abdulsatar sayed
相关产品推荐
相关产品推荐

