Shopware B2B Suite:如何将订单确认邮件发送给下单联系人而非账户所有者?
Shopware B2B Suite 订单确认邮件定向发送/抄送最优方案
针对你遇到的订单确认邮件发送逻辑不符合需求的问题,结合ERP的限制条件,以下是几个可落地的最优方案:
方案一:通过Shopware事件钩子动态修改邮件收件人/抄送
利用Shopware的事件机制,在订单确认邮件发送前拦截并调整收件人信息,直接指向下单联系人邮箱,同时可保留主账户邮箱作为抄送。
- 核心思路:创建自定义Shopware插件,监听订单确认邮件的触发事件(如
OrderConfirmationMailEvent),从订单关联的下单联系人实体中提取邮箱地址,覆盖或补充邮件的收件人/抄送配置。 - 关键注意点:需确保ERP已将下单联系人的邮箱同步至Shopware对应的联系人字段中(因为所有变更通过ERP执行,这一步需要协调ERP侧的数据同步逻辑)。
- 伪代码示例:
public function getSubscribedEvents(): array { return [ OrderConfirmationMailEvent::class => 'adjustOrderConfirmationRecipients', ]; } public function adjustOrderConfirmationRecipients(OrderConfirmationMailEvent $event): void { $order = $event->getOrder(); $contact = $order->getOrderCustomer()->getContactPerson(); if ($contact && $contact->getEmail()) { // 设置下单联系人为收件人 $event->getMail()->setRecipients([ $contact->getEmail() => sprintf('%s %s', $contact->getFirstName(), $contact->getLastName()) ]); // 可选:添加主账户邮箱为抄送 $mainEmail = $order->getOrderCustomer()->getCustomer()->getEmail(); if ($mainEmail && $mainEmail !== $contact->getEmail()) { $event->getMail()->addCc($mainEmail); } } }
方案二:调整ERP与Shopware的客户-联系人同步逻辑
结合ERP仅支持带联系人的客户账户逻辑,协调ERP侧调整同步规则:
- 取消主账户的虚假邮箱设置,将实际下单的联系人映射为Shopware客户账户的关联联系人,并确保该联系人的邮箱被正确同步至Shopware。
- 若Shopware B2B Suite默认支持将订单关联联系人作为邮件收件人,此方案可直接解决问题;若默认不支持,可搭配方案一的事件钩子做兜底处理。
方案三:自定义邮件模板配置动态收件人
在Shopware后台创建自定义订单确认邮件模板,通过动态变量指定收件人:
- 在模板的收件人设置中,使用
{{ order.orderCustomer.contactPerson.email }}作为主收件人,同时添加{{ order.orderCustomer.customer.email }}作为抄送(变量路径需根据Shopware B2B Suite的实际实体结构调整)。 - 前提:Shopware中已正确存储下单联系人的邮箱数据,依赖ERP的同步准确性。
最优方案推荐
优先采用方案一+方案二的组合:
- 先协调ERP调整客户-联系人的同步逻辑,移除主账户的虚假邮箱,确保下单联系人的邮箱同步至Shopware;
- 再通过自定义插件的事件钩子,稳定控制邮件的收件人/抄送逻辑,既适配ERP的限制,又彻底解决邮件定向问题。
内容的提问来源于stack exchange,提问作者mastercheef85
相关产品推荐
相关产品推荐

