WooCommerce中woocommerce_email_headers过滤器添加CC邮箱失效问题
问题分析与解决方案
你的代码核心问题是错误地将邮件头($headers)转换为数组,而WooCommerce的woocommerce_email_headers过滤器要求返回的是字符串格式的邮件头内容,数组格式会导致邮件发送程序无法正确解析CC字段,进而导致CC邮箱收不到邮件。
修正后的代码
function add_cc_to_certain_emails( $headers, $object ) { // 指定需要添加CC的邮件类型 $add_cc_to = array( 'customer_refunded_order', 'customer_partially_refunded_order', ); $cc_email = 'mrbean@gmail.com'; // 匹配目标邮件类型时追加CC头 if ( in_array( $object, $add_cc_to ) ) { // 如果原headers为空,直接初始化;否则追加换行和CC字段 if ( empty( $headers ) ) { $headers = 'Cc: ' . $cc_email . "\r\n"; } else { $headers .= 'Cc: ' . $cc_email . "\r\n"; } } return $headers; } add_filter( 'woocommerce_email_headers', 'add_cc_to_certain_emails', 10, 2 );
关键修正点
- 移除了
utf8_decode():邮箱地址不需要该编码转换,反而可能引发不必要的编码异常 - 保持邮件头为字符串格式:直接在原headers后追加CC字段,确保邮件发送程序能正确解析
- 增加空值判断:避免原headers为空时出现格式错误
额外排查建议
- 改用SMTP发送邮件:WordPress默认的
wp_mail()函数依赖服务器的mail()函数,容易被邮件服务商拦截。安装SMTP类插件配置正规邮箱账号发送,能大幅提升邮件送达率 - 检查服务器邮件日志:联系主机服务商查看邮件发送日志,确认CC邮件是否被服务器发出,以及是否存在被拒收的记录
- 验证邮箱地址格式:确保CC邮箱地址完全正确,无拼写错误
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

