部署在AWS EC2的Spring Boot应用发邮件时出现认证失败异常怎么办?
解决AWS EC2部署Jar包SMTP认证失败问题
从错误信息看,这是微软Exchange/Office 365的SMTP认证失败,本地能正常发但EC2不行,核心原因不是账号密码本身,而是EC2环境和邮件服务商的限制,具体排查方向和解决办法如下:
邮件服务商的IP拦截
微软这类邮件服务商对陌生IP的登录请求会做风险拦截,本地IP可能已经通过了信任验证,而EC2的公网IP是全新的,直接触发了拦截机制。- 登录邮件账号的管理后台,把EC2的公网IP加入IP白名单
- 如果账号开了MFA(多因素认证),本地可能用了MFA弹窗验证,但EC2里没法做交互验证,必须生成应用专用密码替换原密码使用
- 检查Office 365的条件访问策略,是否阻止了非信任区域的IP登录
EC2的网络端口限制
AWS部分区域默认限制25端口的出站流量(防垃圾邮件),如果你的SMTP用的是25端口,大概率会被卡。- 换成465(SSL加密)或587(TLS加密)端口试试,这两个端口一般不受限制
- 检查EC2的安全组和NACLs规则,确保允许出站访问对应SMTP端口的流量
SMTP配置细节遗漏
本地环境可能自动适配了某些配置,但EC2里必须明确指定:- 强制开启加密:JavaMail里要加
mail.smtp.ssl.enable=true(对应465)或mail.smtp.starttls.enable=true(对应587),避免明文连接被拒绝 - 确认邮件服务器地址是官方地址(比如
smtp.office365.com),不要用自定义域名解析地址,防止EC2环境下DNS解析异常
- 强制开启加密:JavaMail里要加
系统时间同步问题
如果EC2的系统时间和邮件服务器时间差超过几分钟,会被判定为异常请求。用date命令查看EC2时间,开启NTP同步确保时间准确。
内容的提问来源于stack exchange,提问作者Mohamed Gomaa
相关产品推荐
相关产品推荐

