同一订单在几秒内收到两封完全相同的确认邮件。常见原因是同步发送与异步队列同时启用,或自定义重试没有幂等。

实际处理步骤

  1. 按订单号对照邮件服务日志、cron_schedule和sales_order.email_sent,确认两次发送分别来自哪个入口。
  2. 使用Magento标准send_new_order_email流程;自定义Observer不能再直接调用TransportBuilder发送同一模板。
  3. 异步发送时只有成功后更新状态,重试前再次检查订单标记;队列消息以order_id和邮件类型做唯一幂等键。
  4. 并发Consumer必须原子领取任务,修复后清理重复调度但不删除待发送的其他订单。

检查命令

SELECT increment_id,email_sent,send_email,created_at FROM sales_order WHERE increment_id='000000123';SELECT job_code,status,messages,executed_at FROM cron_schedule WHERE job_code LIKE '%email%' ORDER BY schedule_id DESC LIMIT 50;rg -n 'sendNewOrderEmail|TransportBuilder|sales_order_place_after' app/code

验证结果

普通下单、支付重试、Consumer重启和邮件服务超时场景中,每种邮件只发送一次且失败可恢复。