发邮件异常问题

功能需求,要在客户接收到一个优惠券时候,发送邮件通知到客户,所有功能都开发完成,在测试环境也是能正常。上线后,却出现了异常(邮件内容的头部logo不对,显示的不是公司的logo,而是magento默认的Logo)。

1、进入后台design配置,Content > design - Configuration > Edit > Transactional Emails,上传了公司Logo(如下图),结果依然不行

上传新的logo,邮件头部logo依然还是magento默认的

2、怀疑是不是多站点原因引起的,于是开启多站点模式,Stores > Configuration > GENERAL >General > Single-Store Mode > Enable,将 Single-Store Mode = No 改为 Yes,就开启了多站点。开启后,再发送邮件,却发现logo变过来了,正常了。查看了design配置,多站点模式下,除了-- No Theme --,其它店铺的Transactional Emails都上传了logo。

3、对比两封邮件的logo的url,发现多站点模式下,正常的logo的url来源于luma主题,而单站点模式下,异常的logo的url来源当前主题的default。

4、查看了vendor/magento/theme-frontend-luma/Magento_Email/web路径,发现logo是正常的,再看当前主题模板下,并没有找到Magento_Email/web路径

问题原因

初步定论是单站点模式下虽然在后台《当前主题 default》主题上传了logo,但默认的-- No Theme --并没有上传logo,程序逻辑最终会去到代码层找当前主题下的Magento_Email/web/logo_email.png,但当前主题下并没有存在此文件,于是就使用了magento默认的logo(继承到默认logo),而多站点模式下找到了luma基础主题的下的logo_email.png,所以也就正常了。

公司原来的开发并不了解magento的继承规则,所以直接修改了luma基础主题下的logo,然后却不会把Logo复制到当前主题下,结果导致了多站点模式下正常,单站点模式下异常的bug,无语的坑太多。

解决方案

1、开启多站点模式,修改Content > design - Configuration >-- No Theme -- > Edit > Transactional Emails,上传logo

2、修改代码,将正常的logo,复制为当前主题/Magento_Email/web/logo_email.png就行,路径如下:app/design/frontend/《当前主题》/default/Magento_Email/web/logo_email.png

最终解决效果