Spring使用JavaMailSender发邮件报535认证失败异常解决方案
Spring Boot 邮件发送535认证失败问题排查与修复
核心错误原因
你遇到的javax.mail.AuthenticationFailedException: 535 5.7.8 Error: authentication failed本质是SMTP认证流程未正常触发,核心配置错误有两处:
- SMTP认证开关配置错误:你在Java配置类和application.properties里都把
mail.smtp.auth设为了false,但Interia的SMTP服务(poczta.interia.pl:587)强制要求客户端做身份认证,关闭这个参数后JavaMail客户端根本不会向服务器发送账号密码信息,直接被服务器拒绝。异常里的UGFzc3dvcmQ6是Base64编码的Password:字符串,就是服务器返回的密码校验要求提示。 - 重复配置导致参数覆盖:你既手动写了
EmailData配置类自定义JavaMailSender Bean,又在application.properties里写了Spring Mail的配置项,两套配置同时存在时很容易出现参数加载错乱,没必要重复定义。
修复步骤
按以下顺序调整配置即可解决问题:
- 把SMTP认证开关改为
true
如果选择用配置文件方式(推荐),修改application.properties对应配置项:
如果选择保留自定义Java配置类,修改对应参数行:spring.mail.properties.mail.smtp.auth=trueproperties.put("mail.smtp.auth", "true"); - 删除重复配置,二选一即可
推荐直接删掉你写的EmailData配置类,Spring Boot会自动读取spring.mail.*前缀的配置完成JavaMailSender的初始化,不需要手动写@Bean实例化,避免手动配置漏写参数。 - 补全Interia要求的TLS配置
Interia的587端口强制要求TLS加密传输,在配置文件里补充一行参数,避免加密协商失败:spring.mail.properties.mail.smtp.starttls.required=true - 校验邮箱侧SMTP权限
如果改完上述配置还是报错,登录Interia邮箱网页端,进入设置页确认SMTP服务处于开启状态;如果你的邮箱开了二次验证,需要生成SMTP专用的应用密码替换你现在填的账号登录密码。
额外代码问题提醒
你写的EmailService里sendMail方法的收件人是硬编码的myemail1@gmail.com,没有使用入参里的toEmail,正式上线前记得把simpleMailMessage.setTo()的参数替换为传入的收件人变量,否则所有通知邮件都会发到你硬编码的邮箱里。
内容的提问来源于stack exchange,提问作者Mario3233
相关产品推荐
相关产品推荐

