订单备注里显示邮件已发送,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与投递状态。使用专门测试地址,避免反复向真实客户重发。