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

使用PHP开发预约表单时邮件发送失败问题求助

问题分析与修复方案

你的PHP预约表单无法发送邮件,核心问题出在代码的逻辑错误、变量大小写不匹配和未定义变量上,具体问题及修复如下:

1. 跳转语句提前执行,导致邮件代码未运行

PHP文件开头的header("Location: ../appointment.html");会让浏览器立即跳转,后续邮件发送代码根本不会执行。需将跳转语句移至邮件发送逻辑之后,或调试时暂时注释。

2. 变量大小写不匹配

  • HTML表单中年龄字段的name是AGE,但PHP中判断的是$_POST['Age'],大小写不一致导致isset判断失败,无法进入邮件发送逻辑。
  • 定义的变量是$Name、$Email,但后续拼接主题和邮箱头时用了$name、$email,变量名大小写不匹配会导致内容为空。

3. 未定义变量导致邮件内容为空

$body = $message;中的$message从未定义,邮件正文为空,会被邮件服务器判定为无效邮件直接拦截,需将收集到的表单内容拼接为邮件正文。

4. 表单下拉框属性错误

性别选择的option用了name属性,应改为value属性,否则无法正确获取选中的性别值。

修复后的代码

HTML表单(修正性别下拉框)

<form action="contact.php" method="POST">
  <div class="row g-3">
    <div class="col-12 col-sm-6">
      <select name="Doctor" class="form-select bg-light border-0 mb-3" style="height: 55px;">
        <option selected>Select A Doctor</option>
        <option value="PROF DR AZFAR FAROGH">PROF DR AZFAR FAROGH (MEDICINE)</option>
        <option value="PROF DR AJWAD FAROGH">PROF DR AJWAD FAROGH (CARDIAC SURGERY)</option>
        <option value="PROF DR IRFAN KHAN">PROF DR IRFAN KHAN (HEMATOLOGY)</option>
        <option value="DR ASMA HASSAN">DR ASMA HASSAN (PULMONOLOGY)</option>
        <option value="DR USAMA MUNIR">DR USAMA MUNIR (CARDIOLOGY)</option>
        <option value="DR AWAIS NIZAMI">DR AWAIS NIZAMI (CARDIOLOGY)</option>
        <option value="DR SUMYYA ASHRAF">DR SUMYYA ASHRAF (FAMILY PHYSICIAN)</option>
        <option value="DR SABAHAT GUL">DR SABAHAT GUL (CARDIOLOGY)</option>
        <option value="DR MUHAMMAD BURHAN BARKAT">DR MUHAMMAD BURHAN BARKAT (UROLOGY)</option>
        <option value="DR MADIHA AZHAR">DR MADIHA AZHAR (DERMATOLOGY)</option>
        <option value="DR FAHAD QAISAR">DR FAHAD QAISAR (MEDICINE)</option>
        <option value="DR MAHTAB AHMED MUKTAR PATAFI">DR MAHTAB AHMED MUKTAR PATAFI (PHYSIOTHERAPY)</option>
        <option value="DR NASIR MAHMOOD">DR NASIR MAHMOOD (PHYSIOTHERAPY)</option>
        <option value="DR SHEHR BANO">DR SHEHR BANO (PHYSIOTHERAPY)</option>
        <option value="DR MUHAMMAD WASSAM">DR MUHAMMAD WASSAM (PHYSIOTHERAPY)</option>
        <option value="DR SARAH NISAR">DR SARAH NISAR (RADIOLOGY)</option>
        <option value="DR AHMAD BILAL">DR AHMAD BILAL (RADIOLOGY)</option>
        <option value="DR ZAFAR JAM">DR ZAFAR JAM (CARDIOLOGY)</option>
        <option value="DR ANWAAR UL HASSAN">DR ANWAAR UL HASSAN (CARDIOLOGY)</option>
        <option value="DR JUNAID AKHTER">DR JUNAID AKHTER (CARDIOLOGY)</option>
        <option value="DR M ZUBAIR AHMAD">DR M ZUBAIR AHMED (PEDIATRIC SURGERY)</option>
        <option value="DR GOHAR BASHIR">DR GOHAR BASHIR (CARDIAC SURGERY)</option>
      </select>
    </div>
    <div class="col-12 col-sm-6">
      <input type="text" name="Name" class="form-control bg-light border-0" placeholder="Your Name" style="height: 55px;" required>
    </div>
    <div class="col-12 col-sm-6">
      <input type="email" name="Email" class="form-control bg-light border-0" placeholder="Your Email" style="height: 55px;" required>
    </div>
    <div class="col-12 col-sm-6">
      <input type="number" name="Number" class="form-control bg-light border-0" placeholder="Your Phone Number" style="height: 55px;" required>
    </div>
    <div class="col-12 col-sm-6">
      <input type="number" name="CNIC" class="form-control bg-light border-0" placeholder="Your CNIC Number" style="height: 55px;" required>
    </div>
    <div class="col-12 col-sm-6">
      <select name="Gender" class="form-control bg-light border-0" placeholder="Select Your Gender" style="height: 55px;" required>
        <option value="MALE">MALE</option>
        <option value="FEMALE">FEMALE</option>
        <option value="NEUTER">NEUTER</option>
      </select>
    </div>
    <div class="col-12 col-sm-6">
      <input type="number" name="AGE" class="form-control bg-light border-0" placeholder="AGE" style="height: 55px;" required>
    </div>
    <div class="col-12 col-sm-6">
      <div class="date" id="date1" data-target-input="nearest">
        <input type="text" name="Date" class="form-control bg-light border-0 datetimepicker-input" placeholder="Appointment Date" data-target="#date1" data-toggle="datetimepicker" style="height: 55px;" required>
      </div>
    </div>
    <div class="col-12 col-sm-6">
      <input type="text" name="Comments" class="form-control bg-light border-0" placeholder="Additional Comments" style="height: 55px;">
    </div>
    <div class="col-12">
      <button class="btn btn-dark w-100 py-3" type="submit">Make Appointment</button>
    </div>
  </div>
</form>

PHP文件(修复逻辑、变量问题)

<?php
if(isset($_POST['Name']) &&
 isset ($_POST['Email']) &&
 isset ($_POST['Doctor']) &&
 isset ($_POST['CNIC']) &&
 isset ($_POST['Number']) &&
 isset ($_POST['Gender']) &&
 isset ($_POST['AGE']) && // 修正为和表单一致的键名
 isset ($_POST['Date']) &&
 isset ($_POST['Comments'])) {

 $Name = $_POST['Name'];
 $Email = $_POST['Email'];
 $Doctor = $_POST['Doctor'];
 $CNIC = $_POST['CNIC'];
 $Number = $_POST['Number'];
 $Gender = $_POST['Gender'];
 $Age = $_POST['AGE'];
 $Date = $_POST['Date'];
 $Comments = $_POST['Comments'];

 // 拼接完整邮件正文
 $body = "预约信息:\n";
 $body .= "姓名: " . $Name . "\n";
 $body .= "邮箱: " . $Email . "\n";
 $body .= "医生: " . $Doctor . "\n";
 $body .= "CNIC: " . $CNIC . "\n";
 $body .= "电话: " . $Number . "\n";
 $body .= "性别: " . $Gender . "\n";
 $body .= "年龄: " . $Age . "\n";
 $body .= "预约日期: " . $Date . "\n";
 $body .= "备注: " . $Comments . "\n";

  $to = '********@gmail.com';
  $subject = 'Appointment - ' . $Name; // 修正变量大小写
  $headers = 'From: ' . $Email . "\r\n" . // 修正变量大小写,添加空格
             "CC: ********@gmail.com\r\n" .
             "Content-Type: text/plain; charset=UTF-8"; // 添加字符集避免乱码

  if (mail($to, $subject, $body, $headers)) {
    header("Location: ../appointment.html?status=success");
  } else {
    header("Location: ../appointment.html?status=error");
  }
} else {
  header("Location: ../appointment.html?status=invalid");
}
?>

额外调试建议

  • 调试时可暂时注释跳转语句,直接输出echo内容,确认是否进入邮件发送逻辑及mail()函数返回值。
  • 查看服务器邮件日志(如Linux系统的/var/log/mail.log),获取邮件发送的具体错误信息。
  • 若使用Gmail收件箱,可改用SMTP方式发送邮件(如PHPMailer库),比原生mail()函数更稳定可靠。

内容的提问来源于stack exchange,提问作者Stack Overflow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:05:13