Magento 2多店铺邮件发件人错误 $store.frontend_name不生效修复
多店铺邮件发件人匹配错误修复方案
故障表现
- 站点共配置2个店铺,所有发送给客户的邮件统一从单个店铺的发件人身份发出,未按邮件所属店铺匹配对应发件人信息
- 核查邮件模板配置,主题部分已正确调用
$store.frontend_name变量,代码如下:
<!--@subject {{trans "Your %store_name order has been canceled" store_name=$store.frontend_name}} @-->
- 模板变量可正常渲染对应店铺名称,但发件人匹配故障仍存在
核心原因
模板内的
$store.frontend_name变量仅负责主题、正文中的店铺名称内容渲染,和发件人身份的读取、匹配逻辑完全独立,因此调整模板代码无法修复该类故障。
分步修复操作
- 检查分店铺发件人配置
进入后台「店铺 > 配置 > 常规 > 商店邮件地址」页面,逐次切换左上角的配置范围到对应店铺视图,取消每个发件人配置项的「使用默认值」勾选,填写该店铺对应的发件人名称、邮箱地址,全部配置完成后执行配置缓存清理。不要在全局配置范围填写固定发件人信息,会覆盖分店铺配置。 - 检查邮件触发逻辑的店铺上下文传递
如果存在自定义邮件触发逻辑、或者安装了第三方邮件相关插件,需要确认邮件发送前是否正确传入业务数据(比如订单、客户数据)所属的店铺ID:- 发送邮件前需要将当前运行环境的店铺切换为业务数据对应的店铺,不要固定使用默认店铺
- 读取发件人配置时,必须指定读取范围为对应店铺,不要直接读取全局配置值,参考代码如下:
// 切换当前环境为订单所属店铺 $this->storeManager->setCurrentStore($order->getStoreId()); // 从对应店铺的配置作用域读取发件人标识 $senderIdentity = $this->scopeConfig->getValue( 'sales_email/order_cancel/identity', \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $order->getStoreId() ); - 排查邮件队列的店铺标识缺失问题
Magento 2.3及以上版本默认开启异步邮件队列,部分旧版本存在邮件入队时未存储对应店铺ID的缺陷,消费队列发送邮件时会自动fallback到默认店铺的发件人配置。可进入「店铺 > 配置 > 高级 > 系统 > 邮件发送设置」,临时关闭「异步发送」功能测试,如果关闭后发件人匹配正常,给邮件队列逻辑补充店铺ID的存取逻辑即可。 - 排查SMTP类插件的强制覆盖配置
多数第三方SMTP发信插件自带「强制覆盖发件人」功能,开启后会全局使用固定发件人信息,忽略分店铺的配置。进入对应插件的配置页,关闭强制覆盖发件人的选项,选择按店铺作用域读取发件人配置即可。
内容的提问来源于stack exchange,提问作者Luan Perosa
相关产品推荐
相关产品推荐

