如何在WordPress中使用Timber/Twig发送邮件?
解决Timber/Twig模板作为邮件内容发送失败的问题
嘿,这个问题我之前也踩过坑!核心问题出在你用错了Timber的方法——Timber::render()是直接把模板内容输出到浏览器(相当于执行了echo),而wp_mail()需要的是字符串格式的邮件内容,不是直接输出的内容。
正确的做法:用Timber::compile()替代render()
compile()方法会把Twig模板渲染成字符串并返回,而不是直接输出,刚好匹配wp_mail()的参数要求。修改后的代码如下:
// 先编译Twig模板,得到渲染后的字符串内容 $email_content = \Timber::compile( 'emails/client-booking.twig', $context ); // 将字符串作为邮件内容传入wp_mail发送 wp_mail( $email, 'Test Mail', $email_content, $headers );
额外的排查建议
- 如果你的邮件是HTML格式,一定要在
$headers里设置正确的内容类型,否则邮件可能显示为乱码或纯文本代码:$headers = array('Content-Type: text/html; charset=UTF-8'); - 先验证WordPress的基础邮件功能是否正常,比如发送一个简单的纯文本测试邮件:
wp_mail('your-test-email@example.com', 'Test', 'Hello from WordPress!'); - 确认
$context里的变量正确传递到了Twig模板,可以先打印编译后的内容检查:
看看渲染结果是否符合预期。echo $email_content; exit;
内容的提问来源于stack exchange,提问作者Yasar Mahmood
相关产品推荐
相关产品推荐

