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

为什么邮件头会导致PHP mail()函数无法发送HTML格式邮件?

核心问题根因

你代码中mail()函数的参数顺序错误,是导致两个环境都出现异常的核心原因:
PHP原生mail()函数的正确语法为:
mail(string $to, string $subject, string $message, array|string $additional_headers = [], string $additional_params = ""): bool
你把发件人配置放到了本该放所有邮件头的第四个参数位,把定义了HTML内容类型的头放到了不识别头配置的第五个额外参数位,导致两个环境都没有正确加载到HTML解析规则。


分环境问题说明

  1. 本地环境纯文本显示问题
    因为头配置没有被正确传入,邮件默认按纯文本格式解析,所以直接展示HTML源码。除了SMTP服务器被邮件客户端标记为不安全的可能性外,修正参数顺序后即可解决绝大多数这类问题。如果修正后仍有异常,可以检查本地SMTP服务配置,或更换测试用邮件客户端验证。
  2. Hostinger服务器发送失败问题
    Hostinger对邮件头的校验规则更严格,错误的参数传入导致头配置不符合服务端要求,直接被拦截发送请求,所以只要传入自定义头就会发送失败。

修正后可用代码

<?php
$email_template = file_get_contents("path/to/my/template");
// 注意rand参数是最小值在前、最大值在后,原代码参数顺序错误会生成不符合预期的随机数
$lucky_number = rand(111111, 999999);
$email_template = str_replace("{{user}}", "User", $email_template);
$email_template = str_replace("{{lucky_number}}", $lucky_number, $email_template);
$receiver = "username@host.com";
$subject = "Random Subject Name";
// 所有邮件头统一放到$headers变量里,每个头末尾用\r\n分隔
$headers =
   "MIME-Version: 1.0\r\n" . 
   "Content-Type: text/html; charset=UTF-8\r\n" .
   "From: iusername@host.com\r\n"; // 发件人配置放到头中,Hostinger要求发件人必须是平台验证过的域名邮箱

if(mail($receiver, $subject, $email_template, $headers))
{
   echo "Email Sent Successfully";
}
else
{
   echo "Email Sending Failed";
}

额外注意事项

  • Hostinger环境下请确认发件人邮箱属于你在Hostinger后台绑定的域名,且已经完成SPF、DKIM记录配置,否则邮件会被拦截或进入垃圾箱。
  • 如果本地环境修正参数后仍显示纯文本,可以先将相同代码放到Hostinger上验证,排除本地SMTP服务被邮件客户端标记不安全的问题。
  • 检查HTML模板内不要有外部脚本、大量外链资源,部分邮件客户端会拦截这类内容,强制显示纯文本。

内容的提问来源于stack exchange,提问作者Joy Dey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 18:36:04