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

PHP发送用户注册验证邮件失败,原正常运行代码近期失效如何排查

问题原因排查及修复方案

代码层面可直接修复的问题

  • HTML内容标签不匹配
    你的邮件内容HTML存在标签闭合错误:<h3>Account activation code: </h4> 用h3开头却用h4闭合,<h2 style="color:#ec5f06;">' . $tempCode . '</h3> 用h2开头用h3闭合。当前主流邮件服务商对邮件内容的HTML合法性校验规则收紧,不规范的标签会直接导致发送请求被拦截。
  • 收件人邮箱处理逻辑错误
    你对收件人邮箱使用了htmlspecialchars()处理,邮箱地址不需要做HTML实体转义,该操作会把合法特殊字符转义为无效字符串,导致收件人地址非法。
  • 邮件头格式不规范
    PHP原生mail()函数要求邮件头每一行必须以\r\n(CRLF)结尾,且必须明确指定字符集,PHP版本更新后对头部格式的校验更严格,你当前的写法缺少字符集声明,换行符如果和服务器操作系统不匹配也会直接导致发送失败。
  • 发件人缺少合法性声明
    你的发件人头部只有邮箱地址,未按照标准格式书写,容易被邮件服务商判定为垃圾邮件触发拒收。

修复后代码

// 收件人邮箱只做必要的转义和清理,去掉htmlspecialchars
$mail = trim($conn->real_escape_string($_POST["mail"]));
$subject  = "FULLBX.COM";
// 修正HTML标签闭合
$message  = '<h3>Account activation code: </h3> <h2 style="color:#ec5f06;">' . $tempCode . '</h2>';
// 规范邮件头格式,统一用\r\n换行,增加字符集声明
$header   = "From: FULLBX Support <support@fullbx.com>\r\n";
$header  .= "Cc: support@fullbx.com\r\n";
$header  .= "MIME-Version: 1.0\r\n";
$header  .= "Content-type: text/html; charset=utf-8\r\n";

$mailsent = mail($mail,$subject,$message,$header);
if ($mailsent) {
    $_SESSION["tempcode"]  = $tempCode;
    $_SESSION["username"]  = $username;
    $_SESSION["mail"]      = $mail;
    $_SESSION["phone"]     = $phone;
    $_SESSION["pass"]      = $pass; 
}else{
    // 调试阶段可打开下方注释查看具体错误,上线后关闭
    // var_dump(error_get_last());
    echo "email is not sending please try again";
    exit();
}

额外排查建议

  • 打开PHP错误提示,通过error_get_last()获取mail()函数返回的具体错误信息,可快速定位是参数错误还是服务器邮件服务配置问题
  • 检查服务器域名的SPF、DKIM记录是否配置正确,近期如果有服务器IP更换、域名解析变更,会导致发件人合法性校验失败被邮件服务商拒收
  • 原生mail()函数容错性极低,长期使用建议替换为成熟的邮件发送类库,可大幅降低格式校验、发送失败的概率

内容的提问来源于stack exchange,提问作者Tako Kobaxidze

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 13:03:02