You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 00:22:49