如何在PrestaShop模块中使用自定义模板发送邮件
PrestaShop自定义模板邮件发送失败解决方案
核心排查及修复步骤:
- 验证邮件模板配置
你调用的模板名为atomicseller,需要确认存在两个必填模板文件:- 路径
/mails/对应语言编码/atomicseller.html(HTML格式模板) - 路径
/mails/对应语言编码/atomicseller.txt(纯文本格式模板)
若你使用自定义主题,也可以将模板放在/themes/当前主题名/mails/对应语言编码/目录下。两个模板缺一不可,同时要确保web服务运行用户对模板文件有读取权限(建议权限设置为644)。
- 路径
- 修正传参问题
你当前代码未显式传入店铺ID,多店铺场景下会导致模板路径匹配错误,且发件人参数建议留空调用后台全局配置,避免和后台配置的发件人邮箱不一致被邮件服务商拦截,优化后的代码参考:$context = Context::getContext(); $res = Mail::Send( (int)$orderLanguage->id, 'atomicseller', $context->getTranslator()->trans( 'Return label regarding order %s.', [$ref], 'Emails.Subject', $orderLanguage->locale ), [ '{order_ref}' => $ref, '{message}' => $eCont, // 补充模板默认必填的系统变量,避免渲染失败 '{shop_name}' => $context->shop->name, '{shop_logo}' => $context->shop->getLogo(), '{shop_url}' => $context->shop->getBaseURL() ], 'Pershin.alexey@list.ru', 'Pershin Alexey', // 留空自动读取后台配置的发件人信息,避免校验失败 null, null, null, null, _PS_MAIL_DIR_, true, // 显式传入店铺ID,避免多店铺场景下模板定位错误 (int)$context->shop->id ); - 查看具体错误日志
调用发送方法后可以直接捕获Mail类的错误信息,定位具体问题:
常见错误包括SMTP配置异常、模板文件不存在、邮件地址格式被校验拦截等。if (!$res) { $sendError = Mail::getError(); // 可打印或写入日志查看具体错误原因 var_dump($sendError); } - 验证全局邮件配置
先进入PrestaShop后台「高级参数」-「电子邮件」页面,使用内置的测试邮件功能发送测试信,确认全局邮件配置正常。如果你使用Gmail作为发件人,需要在Google账号中开启「应用专用密码」,不能直接使用账号密码登录SMTP,否则会被Google的安全策略拦截。
内容的提问来源于stack exchange,提问作者lionking-123
相关产品推荐
相关产品推荐

