PHP发送HTML邮件显示异常头部,如何实现WordPress同款效果?
解决PHP发送HTML邮件显示异常头部的问题
问题概述
用PHP原生mail()函数发送HTML邮件时,邮件能正常送达,但收件端会显示异常的头部信息(例如“Mailed by: My.hostname.com”),而WordPress发送的邮件则无此问题,需要调整代码实现一致的发送效果。
核心原因
WordPress发送邮件时会配置更规范的邮件头部信息,并且会通过sendmail的参数指定发件标识;而原生mail()函数如果缺少这些配置,邮件服务器会自动补充默认头部,导致显示异常。
解决方案及修改后的代码
关键调整点
- 改用符合RFC标准的
\r\n作为头部换行符 - 补充
Reply-To、Return-Path等规范头部字段 - 给
mail()函数添加sendmail参数,指定Return-Path(和WordPress行为对齐)
修改后的代码
<?php $name = $_POST["name"]; $email = $_POST["email"]; $phone = $_POST["phone"]; $product = $_POST["product_name"]; $country = $_POST["country"]; $template_File = "template.php"; $email_to = $email; $subject = "asunto hoy"; // 统一发件人信息 $from_name = "Roberto"; $from_email = "fa.luis@outlook.com"; // 构建符合标准的邮件头部 $headers = "From: {$from_name} <{$from_email}>\r\n"; $headers .= "Reply-To: {$from_name} <{$from_email}>\r\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; $headers .= "Return-Path: {$from_email}\r\n"; if(file_exists($template_File)){ $message = file_get_contents($template_File); } else { die("unable to locate template file"); } // 替换模板变量 $message = str_replace("#name#", $name, $message); $message = str_replace("#product#",$product, $message); $message = str_replace("#email#", $email, $message); $message = str_replace("#phone#", $phone, $message); // 配置sendmail参数,指定Return-Path $sendmail_options = "-f{$from_email}"; if (mail($email_to, $subject, $message, $headers, $sendmail_options)) { echo "listo"; } else { echo "no listo"; } echo $country; echo $message; ?>
额外建议
如果上述调整后仍有异常,建议使用PHPMailer这类专业邮件库,它和WordPress底层的邮件发送逻辑一致,能更好地兼容各种邮件服务器,避免原生mail()函数的兼容性问题。
内容的提问来源于stack exchange,提问作者Luis Roberto Franco
相关产品推荐
相关产品推荐

