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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:46:10