订单备注里显示邮件已发送,Magento也没有异常,但客户收件箱和垃圾箱都没有。应用层的sent通常只表示本地Transport没有抛异常或上游SMTP返回250,并不等于对方邮箱最终投递成功。
先确定邮件有没有离开Magento
bin/magento cron:run --group default grep -iE 'mail|smtp|transport|exception' var/log/system.log var/log/exception.log | tail -n 100
若启用了异步发送,确认相关配置与Cron执行记录。不同Magento版本队列表结构不同,不要照搬网上的DELETE SQL;先从订单email_sent标记、cron日志和SMTP模块日志判断。
SMTP返回码比成功提示可靠
打开SMTP模块的脱敏debug,记录message-id、收件域和服务器响应,不记录正文。4xx代表临时失败,应进入重试;5xx是明确拒绝。服务器返回250后,去邮件服务商控制台按message-id查投递、退信或抑制列表。
同域能收,外域收不到
- 检查发件域SPF是否包含实际发送服务;
- 验证DKIM签名通过且d=域与From域对齐;
- 查看DMARC策略与聚合报告;
- PTR或rDNS是否与发送IP和HELO合理对应;
- From与Return-Path不要冒用未经授权域。
dig TXT example.com dig TXT _dmarc.example.com dig TXT selector._domainkey.example.com
Magento侧的两个细节
每个Store View的Sender Email必须真实存在;模板中的绝对图片URL、超大附件和可疑短链会提高过滤风险。先发送一封纯文本最小模板做对照,再逐步恢复HTML和附件。
修复后同时测试Gmail、Outlook和企业邮箱,保留message-id与投递状态。使用专门测试地址,避免反复向真实客户重发。

