订单创建正常,后台重发也可能成功,但自动邮件长期不发。先确认是否启用了异步发送,再检查订单是否真的进入待发状态。

解决方案

  1. 查询问题订单的send_email与email_sent。send_email=0表示业务流程根本没有安排发送;send_email=1且email_sent为空才是待发送。
  2. 在cron_schedule中查sales_send_order_email及对应时间窗口。success但邮件未到,需要查SMTP传输和退信;error/missed则先修Cron锁、PHP错误或执行频率。
  3. 自定义下单代码应通过Order Email Sender安排发送,不要只创建Order后假设Cron会自动发现。异步模式下也要保留正确Store环境和模板配置。
  4. 修复后只对确认未发送的订单重试,发送前再次检查email_sent,防止批量重发造成重复邮件。
排查命令
SELECT increment_id,store_id,send_email,email_sent,created_at FROM sales_order WHERE increment_id='000000123';
SELECT job_code,status,messages,scheduled_at,executed_at,finished_at FROM cron_schedule WHERE job_code='sales_send_order_email' ORDER BY schedule_id DESC LIMIT 20;
bin/magento cron:run --group default

回归测试

创建访客和登录客户订单各一笔,观察一轮Cron后email_sent变为1;模板语言、发件人、订单链接和重复发送控制均正确。

SMTP返回250只代表服务器接收,不代表最终进收件箱;需要结合退信和邮件服务事件。