WooCommerce HTML格式订单确认邮件无法接收 求排查修复指导
WooCommerce HTML格式订单邮件无法接收问题排查与修复
环境信息
- WooCommerce版本:8.4.0
- WordPress版本:6.4.2
- PHP版本:8.0.30
- 父主题:Avada
- 子主题:Avada-child
问题描述
用户无法收到HTML格式的订单确认邮件,但纯文本格式可正常接收;网站其他邮件功能(如Contact Form 7)工作正常,SMTP配置及邮件发送功能已验证无异常。日志显示HTML格式订单邮件发送成功,但收件箱无法收到,仅HTML格式下出现该问题。
已完成排查
- 禁用所有插件排查插件冲突
- 更新子主题的WooCommerce模板
- 更新所有插件及主题
进一步排查与修复步骤
1. 验证HTML邮件模板合法性
HTML邮件易因代码不规范被邮箱服务商拦截:
- 临时切换至WooCommerce默认邮件模板:进入「WooCommerce > 设置 > 邮件 > 订单确认」,点击「管理」,在「模板」选项中选择默认模板,测试HTML邮件是否能正常接收。
- 检查自定义HTML模板代码:确保没有未闭合标签、错误嵌套结构,避免使用过于复杂的内嵌CSS(多数邮件客户端对CSS支持有限)。
2. 检查邮件头信息配置
HTML邮件的头信息错误会导致接收异常:
- 通过SMTP插件(如WP Mail SMTP)查看邮件完整日志,确认
Content-Type字段为text/html; charset=UTF-8,无重复或错误头字段。 - 若头信息异常,可在子主题
functions.php中添加代码强制修正:
add_filter( 'woocommerce_email_content_type', 'fix_html_email_content_type', 20, 2 ); function fix_html_email_content_type( $content_type, $email ) { // 针对订单相关邮件强制设置正确的HTML内容类型 $target_emails = ['customer_processing_order', 'customer_completed_order', 'customer_on_hold_order']; if ( in_array( $email->id, $target_emails ) ) { return 'text/html; charset=UTF-8'; } return $content_type; }
3. 测试邮箱服务商过滤规则
不同邮箱服务商对HTML邮件的过滤标准不同:
- 更换多域名邮箱测试(如企业邮箱、不同服务商的个人邮箱),确认是否为特定服务商拦截问题。
- 检查收件人的垃圾邮件、归档文件夹,确认邮件是否被误判。
- 配置SPF、DKIM、DMARC记录,提升邮件可信度,降低被拦截概率。
4. 排查主题自定义邮件钩子
Avada主题可能通过钩子修改了HTML邮件内容:
- 在子主题
functions.php中临时注释所有自定义的WooCommerce邮件钩子代码,测试HTML邮件是否恢复正常。 - 若恢复正常,逐一启用钩子代码定位问题根源。
5. 检查PHP环境配置
PHP环境的编码或内存限制可能影响HTML邮件生成:
- 确认PHP的
mbstring扩展已启用,且mbstring.internal_encoding设置为UTF-8,避免内容编码错误。 - 检查
php.ini中的memory_limit值,确保足够生成复杂HTML邮件(建议设置为256M以上)。
内容的提问来源于stack exchange,提问作者Raj Kumar
相关产品推荐
相关产品推荐

