Spring Boot邮件发送所有配置均正确 仍无法正常发送问题求助
Spring Boot Gmail 邮件发送失败排查方案
核心问题排查点
- Gmail 账号权限校验
你配置的密码为Google应用专用密码,必须满足两个前提才能生效:- 对应Google账号已开启两步验证
- 该应用专用密码是针对当前项目生成,未出现输入错误、过期的情况
目前Google已禁止使用账号普通密码直接登录SMTP服务,未满足上述条件会直接触发认证失败。
- 网络连通性校验
国内网络环境无法直接访问smtp.gmail.com,如果项目在国内运行,要么配置合规的网络代理,要么替换为国内邮箱服务(如QQ邮箱、163邮箱),或部署到海外网络环境测试。 - 配置参数补充
现有配置缺少两个必要的TLS校验参数,容易触发证书校验失败,可补充如下配置:@Bean public JavaMailSender getJavaMailSender() { JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); mailSender.setHost("smtp.gmail.com"); mailSender.setPort(587); mailSender.setUsername("xxxxxx"); mailSender.setPassword("fubwbpumstgwnxef"); Properties props = mailSender.getJavaMailProperties(); props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); // 补充以下两个配置解决TLS校验问题 props.put("mail.smtp.starttls.required", "true"); props.put("mail.smtp.ssl.trust", "smtp.gmail.com"); props.put("mail.debug", "true"); return mailSender; } - Bean 优先级校验
确认项目中使用的JavaMailSender实例是你自定义的Bean,Spring Boot的自动装配可能会生成默认实例覆盖你的配置,可在当前Bean上添加@Primary注解强制优先使用该实例,或注入时通过@Qualifier("getJavaMailSender")指定Bean名称。 - 日志定位
你已经开启了mail.debug=true,触发邮件发送逻辑时查看控制台的Debug日志,可直接定位具体错误类型:- 连接超时/连接拒绝:基本为网络连通性问题
- 535 认证失败:为账号权限、密码错误问题
- 证书校验失败:补充上述ssl.trust配置即可解决
内容的提问来源于stack exchange,提问作者Mohammad
相关产品推荐
相关产品推荐

