GPTMail收不到AWS登录验证码邮件的问题已修复
最近遇到一个诡异的现象,通过GPTMail注册AWS账号,注册过程中可以正常接收到邮件,注册成功后的邮件也可以收到,但是唯独登录AWS账号时的登录验证码邮件收不到,导致账号无法登录,已登录状态的账号也无法更改邮箱(修改邮箱也需要登录验证码)。查看日志也找不到任何相关的邮件痕迹。正好不久前也有使用GPTMail的朋友也反映了同样的问题,于是今天抽空看了下。
在AI的辅助分析下最终找到了原因,如果存在其他特定邮件收不到的问题已经也会一并修复了:
问题总结
原因: AWS 对于敏感邮件(如登录验证码)有严格的安全策略,强制要求接收方服务器支持 STARTTLS 加密传输。 由于此前的 SMTP 服务器只支持明文传输,AWS 在建立连接握手阶段发现不支持加密后,为了保护验证码安全,直接断开连接并拒绝发送。这导致了邮件丢失且服务端没有任何业务日志。
之前的两个错误推测及排除原因:
- 域名被误停用:测试确认域名状态正常。
- 解析失败:如果是解析失败,至少会有接收数据的日志,但因为连接在握手阶段就断了,所以日志为空。
修复方案
已通过代码修改解决了此问题:
启用 TLS 支持: 修改代码
,使其能够读取 SSL 证书文件,并开启
功能。STARTTLS配置证书路径: 在代码中
添加了
和SMTP_CERT_FILE
两个环境变量配置项。SMTP_KEY_FILE优化身份标识 (HELO): 将服务器自报家门的名字从
改为了配置的真实域名,避免被严格的反垃圾策略拒绝。localhost
现在只要配置了正确的证书路径并重启服务,AWS 就能识别出服务器支持加密,从而正常发送验证码邮件。
