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

PHP联系表单突发故障停止发送邮件求助

问题诊断与修复方案

先看你PHP代码里的几个明显语法错误,这大概率是导致邮件发送失败的核心原因——哪怕你恢复了旧版本,可能不小心带了这些错误:

1. 邮件内容的换行符语法错误

在$emailBody里,"Phone: $phone 'n"这里用了单引号的'n,正确的换行符应该是转义的\n。这个错误会直接导致PHP解析脚本失败,中断执行,自然发不出邮件。

2. 邮件头格式不符合标准

Reply to的写法不规范,邮件标准里应该是Reply-To:(注意大写字母和冒号),原代码的写法会被邮件服务器识别为无效头,可能导致邮件被拒收或发送失败。

3. 缺少错误检查与基础验证

你既没有检查mail()函数的执行结果,也没有对表单字段做基础验证(比如必填字段是否为空、邮箱格式是否正确),这不仅容易出错,也没法快速定位问题所在。


修正后的PHP代码

<?php
// 先确认是POST请求再处理
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 获取表单数据并做基础过滤
    $name = trim($_POST['name'] ?? '');
    $email = trim($_POST['email'] ?? '');
    $phone = trim($_POST['phone'] ?? '');
    $message = trim($_POST['message'] ?? '');

    // 基础表单验证
    $errors = [];
    if (empty($name)) $errors[] = "请填写您的姓名";
    if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) $errors[] = "请填写有效的邮箱地址";
    if (empty($message)) $errors[] = "请填写您的留言内容";

    if (!empty($errors)) {
        // 把错误信息存入session,返回表单页提示用户
        session_start();
        $_SESSION['form_errors'] = $errors;
        header("Location: index.php");
        exit;
    }

    $emailFrom = 'myemail@gmail.com';
    $emailSubject = 'New Form Submission';
    // 修复换行符错误
    $emailBody = "Name: $name.\nEmail: $email.\nPhone: $phone\nMessage: $message.";
    $to = 'myemail@gmail.com';
    // 修复Reply-To头格式,加上编码声明让邮件显示更规范
    $headers = "From: $emailFrom\r\n";
    $headers .= "Reply-To: $email\r\n";
    $headers .= "Content-Type: text/plain; charset=UTF-8\r\n";

    // 检查邮件发送结果
    if (mail($to, $emailSubject, $emailBody, $headers)) {
        session_start();
        $_SESSION['form_success'] = "留言发送成功!我会尽快回复您。";
        header("Location: index.php");
    } else {
        session_start();
        $_SESSION['form_errors'] = ["邮件发送失败,请稍后再试或通过其他方式联系我。"];
        header("Location: index.php");
    }
    exit;
} else {
    // 非POST请求直接跳回表单页
    header("Location: index.php");
    exit;
}
?>

主机/服务器层面的排查步骤

如果修复代码后还是无法发送,那可能是主机配置问题,可以按以下步骤排查:

  • 检查mail()函数是否被禁用:创建一个phpinfo.php文件,内容为<?php phpinfo(); ?>,上传到主机后访问,搜索mail相关配置,查看sendmail_path是否为空,或者主机是否禁用了该函数。很多共享主机为了防垃圾邮件,默认禁用mail(),需要改用SMTP方式发送。
  • 查看服务器错误日志:大部分主机控制面板(比如cPanel)里有错误日志选项,查看最近的PHP错误日志,找有没有和邮件发送相关的报错(比如权限问题、sendmail配置错误)。
  • 尝试用SMTP替代原生mail():如果mail()确实无法使用,建议用PHPMailer或SwiftMailer这类库,通过SMTP发送(比如用你的Gmail账号,注意需要开启应用专用密码)。
  • 检查垃圾邮件文件夹:有时候邮件其实发送成功了,但被收件箱判定为垃圾邮件,先去垃圾邮件里确认一下。

另外,你可以给HTML表单的必填字段加上required属性,做一层前端验证:

<input type="text" name="name" class="form-control" placeholder="Your Name *" required/>
<input type="text" name="email" class="form-control" placeholder="Your Email *" required/>
<textarea name="message" class="form-control" placeholder="Your Message *" style="width: 100%; height: 150px" required></textarea>

这样用户提交前会被浏览器提示填写必填字段,减少无效请求。

内容的提问来源于stack exchange,提问作者Sam Donaghy-Bell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:07:34