0、一句话概括bug的原因
项目更换了邮箱服务器,原服务器支持的账号格式在新服务器上不被支持;即发送给新服务器的账号错误。
1、概述
(1)bug:
java程序通知阿里云邮箱服务器发送邮件失败。
异常报错信息:AuthenticationFailedException: 526 Authentication failure[0]。
(2)背景:
弃用原邮箱服务器、更换为阿里云邮箱服务器后,所有版本的项目向服务器发出的邮件请求均无响应。
(3)排错:
AuthenticationFailedException,翻译过来就是认证不通过异常;认证不通过的原因一般是:服务器错误、用户名错误、用户名密码不匹配。
阿里云官方排错参考连接:阿里邮箱如何通过SMTP程序发信
使用参数在Foxmail中配置,可成功进行SMTP发信;这一步,确定了服务器无错、用户名无错、用户名与密码匹配。
那么,哪里出了问题?
翻阅官网原文:
经排查,SMTP服务器配置、端口没有错误;那么问题就藏在代码逻辑和参数中。
当时对代码逻辑和参数并未产生质疑:代码延用的是之前对接服务器的部分;需要变动的参数都存在了数据库,并且这些参数在Foxmail上已被验证通过。
把问题甩给阿里云人工,工程师查看操作日志后确定服务器接收的账号密码出错。
基于出错点,重新复盘:服务器没问题,数据库的帐号密码没问题,那就是java程序处理后并向服务器发送的账号密码出了问题!程序拿到了正确的帐号密码,却向服务器发送了错误的。
在可能出错的代码块内排查:从src文件夹代码到hutool工具类库源码一路debug,发现阿里云邮箱服务器识别不了邮件账号;同样的代码逻辑,发送给原服务器的有效账号是“tairui”,而阿里云服务器需要的是“tairui@aliyun.com”。
最终重新拼接邮件账号字符串,问题解决。