Shopware 6中MailService触发弃用异常致邮件发送失败咨询
Shopware 6 弃用异常处理及MailService版本兼容问题
为什么生产环境会抛出弃用异常
Shopware 6.4.17.0调整了弃用提示的处理逻辑:
- 开发环境中弃用提示默认是警告级别,但生产环境如果PHP错误报告级别包含
E_USER_DEPRECATED,就会将弃用提示转为异常抛出。 - 你的
CustomMailService调用的内部邮件发送逻辑,间接触发了StorableFlow::setOriginalEvent()这个已标记为弃用的方法,虽然该方法在6.4全版本仍能运行,但高错误级别下会触发异常阻断流程。
如何阻止该异常抛出
有两种可行方案:
1. 调整PHP错误报告级别
在生产环境的php.ini文件中修改错误报告配置,排除弃用相关的错误类型:
error_reporting = E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED
或者在Shopware的生产环境配置文件(如config/packages/prod/framework.yaml)中添加设置:
framework: php_errors: log: true throw: false
2. 替换触发弃用方法的调用逻辑
Shopware 6.4后期推荐使用更现代的邮件发送方式,避免触发旧的弃用逻辑:
- 直接注入Symfony的
MailerInterface来发送邮件,替代原有的MailService调用路径。 - 如果是触发系统内置邮件模板,使用
Shopware\Core\Content\Flow\Dispatching\Action\SendMailAction或FlowMailSender通过Flow机制发送,绕过弃用的setOriginalEvent()方法。
6.5版本是否还能使用MailService类
Shopware 6.5中,旧的Shopware\Core\Framework\Mail\MailService会被正式移除,官方不再维护该类。建议提前适配:
- 使用Symfony原生的
MailerInterface处理自定义邮件发送。 - 对于Shopware内置邮件流程,完全迁移到Flow引擎相关的邮件发送服务,比如
FlowMailSender或通过Flow配置触发邮件。
内容的提问来源于stack exchange,提问作者Sebbal
相关产品推荐
相关产品推荐

