提交表单时PHP文件未执行,邮件发送与页面跳转均失效
修复contact.php邮件发送失效问题
原代码存在的核心问题
- 变量覆盖:三次直接赋值
$email_message,导致最终仅保留「发送者邮箱」的内容,姓名、问题描述全部丢失 - 无邮件发送逻辑:仅定义了邮件内容变量,完全没有调用PHP的邮件发送函数
mail() - 未校验POST数据:直接使用
$_POST['Name']等变量,若表单提交异常会触发PHP未定义索引错误,导致页面崩溃 - 缺失必要邮件头:没有设置发件人、内容类型等头信息,邮件大概率被服务器拦截或标记为垃圾邮件
修复后的完整contact.php代码
<?php // 先校验POST数据是否存在 if (!isset($_POST['Name'], $_POST['Email'], $_POST['Subject'], $_POST['Question'])) { die("表单数据提交异常,请返回重新提交"); } $email_to = "culinaryshare@gmail.com"; $email_subject = $_POST['Subject']; $name = trim($_POST['Name']); $email = trim($_POST['Email']); $question = trim($_POST['Question']); // 正确拼接邮件内容,避免覆盖 $email_message = "Sender Name: " . $name . "\n\n"; $email_message .= "Sender Email: " . $email . "\n\n"; $email_message .= "Content: " . $question . "\n"; // 设置必要的邮件头 $headers = "From: " . $email . "\r\n"; $headers .= "Reply-To: " . $email . "\r\n"; $headers .= "Content-Type: text/plain; charset=UTF-8\r\n"; // 执行邮件发送 $mail_sent = mail($email_to, $email_subject, $email_message, $headers); // 根据发送结果提示用户 if ($mail_sent) { ?> <h1>Thank You For Contacting Us!</h1> <p>Return to Our <a href="../index.html">Homepage</a></p> <?php } else { ?> <h1>Sorry, Something Went Wrong</h1> <p>Failed to send your message. Please try again later or contact us directly at culinaryshare@gmail.com.</p> <p><a href="../index.html">Return to Homepage</a></p> <?php } ?>
关键修改说明
- 添加数据校验:用
isset()检查所有必填字段是否存在,避免未定义索引错误 - 变量拼接:使用
.=运算符拼接邮件内容,保留所有用户提交的信息 - 完善邮件头:设置发件人、回复邮箱和内容编码,提升邮件送达率
- 添加发送结果反馈:根据
mail()的返回值显示不同提示,方便用户知晓状态 - 数据清理:用
trim()去除用户输入内容的首尾空格,避免无效空格干扰
额外注意事项
- 确保你的服务器支持PHP的
mail()函数,部分虚拟主机可能需要额外配置 - 若
mail()函数不稳定,可使用PHPMailer类来实现更可靠的邮件发送 - 可进一步添加输入过滤(如
filter_var($email, FILTER_VALIDATE_EMAIL)校验邮箱格式),提升安全性
内容的提问来源于stack exchange,提问作者NightwavesStudios
相关产品推荐
相关产品推荐

