使用PHP mail()函数发送邮件及落地页调用问题排查请求
PHP mail() 邮件发送及跳转问题排查与修复
代码里的核心问题及修复点:
- 多余符号导致语法错误:代码每行开头的
>是无效符号,会直接导致PHP解析失败,脚本完全无法运行,必须全部删除。 - 邮件头格式错误:
$headers= "From : ".$mailFrom;中From和冒号之间的空格不符合邮件头规范,正确格式应为From:(无空格),否则会被邮件服务器判定为无效头信息,拒收邮件。 - 邮件内容换行不规范:邮件内容里的普通换行要替换为
\r\n(RFC标准换行符),否则内容显示混乱,还可能触发反垃圾邮件机制。 - 跳转后未终止脚本:
header("Location: xxx.html")执行后必须加exit();或die();,否则PHP可能继续执行后续代码,导致跳转失效。 - 输入未过滤存在风险:直接使用用户提交的
$_POST数据可能引发邮件头注入攻击,需要对输入做基础过滤。
修正后的完整代码:
<?php if (isset($_POST['submit'])) { // 过滤并验证用户输入 $name = filter_var($_POST['name'], FILTER_SANITIZE_STRING); $mailFrom = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL); $message = filter_var($_POST['message'], FILTER_SANITIZE_STRING); $mobile = filter_var($_POST['mobile'], FILTER_SANITIZE_STRING); // 验证邮箱格式有效性 if (!$mailFrom) { header("Location: error.html"); exit(); } $mailTo = "xxxxx@yourdomain.com"; // 替换为实际收件邮箱 // 规范邮件头,添加必要的额外信息 $headers = "From: ".$mailFrom."\r\n"; $headers .= "Reply-To: ".$mailFrom."\r\n"; $headers .= "Content-Type: text/plain; charset=UTF-8\r\n"; // 用标准换行符格式化邮件内容 $txt = "You have received an email from ".$name.".\r\n\r\n"; $txt .= $message.".\r\n\r\n"; $txt .= "Mobile : ".$mobile; $subject = "Information Request"; // 执行发送并判断结果 if(mail($mailTo, $subject, $txt, $headers)){ header("Location: xxx.html"); exit(); } else { // 发送失败的处理逻辑 header("Location: send-fail.html"); exit(); } } ?>
额外排查建议:
如果修正后仍有问题,可检查:
- 收件邮箱是否开启反垃圾规则,尝试将发件地址加入白名单
xxx.html的路径是否正确,确保和PHP脚本在同一目录,或使用绝对路径
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

