Form.php表单无法发送提交数据问题求助
排查邮件发送失败的问题
看起来你的表单验证和Google reCAPTCHA都正常工作,问题大概率出在邮件发送的代码逻辑里,我帮你梳理几个关键问题点和修复方案:
1. 邮件头(Headers)语法错误
你定义$headers的代码存在明显问题:
$headers = "From: $email_from "; "Reply-To: $email_from ";
这里第二个"Reply-To:..."字符串没有和$headers拼接,相当于被直接丢弃了;而且邮件头的换行必须遵循RFC标准,用\r\n而非单纯的换行,否则服务器可能无法正确解析邮件头。正确的写法应该是:
$headers = "From: $email_from\r\n"; $headers .= "Reply-To: $email_from\r\n"; // 推荐加上内容类型声明,确保邮件编码和格式正确 $headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
2. 变量使用不一致与转义问题
你先通过isset给$name、$telephone赋值,但后续又直接用$_POST["message"]覆盖$question,虽然这不会直接导致邮件失败,但容易出现未定义变量警告(如果开启错误提示的话)。另外,$email被你用htmlspecialchars转义过,邮件里应该使用原始的用户邮箱地址(也就是$email_from),转义后的字符串可能会破坏邮箱格式。
3. mail()函数的参数错误
你调用mail()时用了"-f" .$email,但$email是转义后的地址,应该换成原始的$email_from,避免发送时出现地址格式异常。
4. 开启错误提示辅助排查
建议在代码开头加上错误提示代码,这样能直接看到邮件发送时的具体错误信息:
error_reporting(E_ALL); ini_set('display_errors', 1);
如果mail()执行失败,会返回false并输出相关错误,帮你快速定位服务器端的问题(比如sendmail配置错误、端口被封禁等)。
修复后的邮件发送代码片段
else { $email_from = $_POST["email"]; $email_to = "billy.farroll@hotmail.com"; $question = $_POST["message"]; $name = $_POST["name"]; // 直接获取,避免未定义变量 $telephone = $_POST["telephone"] ?? ''; // 用null合并运算符处理可选字段 $email_subject = "Enquiry"; // 正确构建符合标准的邮件头 $headers = "From: $email_from\r\n"; $headers .= "Reply-To: $email_from\r\n"; $headers .= "Content-Type: text/plain; charset=UTF-8\r\n"; // 整理邮件内容,用\r\n保证换行在所有邮箱客户端正常显示 $message = "Name: ". $name . "\r\nMobile Number: " . $telephone . "\r\nEmail Address: " . $email_from . "\r\n\r\nMessage:\r\n" . $question; // 使用原始邮箱地址作为-f参数 $sent = mail($email_to, $email_subject, $message, $headers, "-f" . $email_from); if ($sent) { echo 'Thank you for your enquiry, one of our team will be in contact with you shortly.'; } else { // 新增失败提示,方便用户和自己排查 echo 'Oops, something went wrong while sending your message. Please try again later.'; } }
额外排查建议
- 检查服务器邮件配置:确认服务器是否安装了sendmail/postfix等邮件服务,是否允许PHP发送邮件;
- 查看服务器邮件日志(通常在
/var/log/mail.log或类似路径),里面会有邮件发送的详细记录,包括具体失败原因; - 检查收件邮箱的垃圾邮件文件夹,有时候正常邮件会被误判为垃圾邮件。
内容的提问来源于stack exchange,提问作者billy.farroll
相关产品推荐
相关产品推荐

