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

PHP 8.0及以上版本邮件脚本失效问题求助

PHP 8.0+ 兼容调整:表单邮件脚本修复方案

以下是针对你的邮件脚本适配PHP 8.0及以上版本的具体修改点:

核心修改项

  • 初始化$headers变量:原代码直接使用.=拼接未定义的$headers,PHP8.0+会抛出未定义变量错误,需先初始化为空字符串。
  • 移除废弃函数调用:get_magic_quotes_gpc()在PHP5.4已废弃,PHP8.0完全移除,直接删除相关判断代码。
  • 安全获取POST参数:直接访问$_POST中不存在的键会触发警告,改用??空合并运算符处理,避免报错。
  • 修正变量名错误:成功提示中误用$first_name,实际变量为$firstname,需统一变量名。
  • 可选优化邮箱验证:原正则表达式过于冗长,改用PHP内置的filter_var()函数做邮箱验证,更可靠且兼容新版本。

修改后的完整代码

<?php
if ($_SERVER['REQUEST_METHOD'] !== 'POST') exit;

// 邮箱验证:改用PHP内置函数(可选,替代原正则)
function isEmail($email) {
    return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}

if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");

// 安全获取POST参数,避免未定义键警告
$gender     = $_POST['gender'] ?? '';
$firstname  = $_POST['firstname'] ?? '';
$lastname   = $_POST['lastname'] ?? '';
$street     = $_POST['street'] ?? '';
$zipcode    = $_POST['zipcode'] ?? '';
$place      = $_POST['place'] ?? '';
$phone      = $_POST['phone'] ?? '';
$email      = $_POST['email'] ?? '';
$send       = $_POST['send'] ?? '';

$model      = $_POST['model'] ?? '';
$service    = $_POST['service'] ?? '';
$serial     = $_POST['serial'] ?? '';

$comments   = $_POST['comments'] ?? '';
$mymail     = 'XXXXXXXX';
$verify     = $_POST['verify'] ?? '';

if (trim($firstname) == '') {
    echo '<div class="error_message">请输入姓名。</div>';
    exit();
} else if (trim($email) == '') {
    echo '<div class="error_message">请输入邮箱。</div>';
    exit();
} else if (!isEmail($email)) {
    echo '<div class="error_message">请输入有效的邮箱地址。</div>';
    exit();
}

if (trim($comments) == '') {
    echo '<div class="error_message">请输入故障描述。</div>';
    exit();
}

// 移除get_magic_quotes_gpc相关代码(该函数已废弃)

$address = "XXXXXXXX";

$e_subject = '维修申请来自 ' . $firstname . ' ' . $lastname . '.';

$e_body = "XXXXXXX" . PHP_EOL . PHP_EOL;
$e_content = "\"$comments\"" . PHP_EOL . PHP_EOL;
$e_reply = "XXX" . PHP_EOL . PHP_EOL;

$msg = wordwrap($e_body . $e_content . $e_reply, 70);

// 初始化headers变量
$headers = "";
$headers .= "From: $mymail" . PHP_EOL;
$headers .= "Reply-To: $email" . PHP_EOL;
$headers .= "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
$headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;

if (mail($address, $e_subject, $msg, $headers)) {
    header("Location: XXXXXXXXXX", true, 301);
    exit();
    // 以下代码在header跳转后不会执行,可按需保留或删除
    echo "<fieldset>";
        echo "<div id='success_page'>";
    echo "<h1>邮件发送成功。</h1>";
    echo "<p>感谢 <strong>$firstname</strong>,我们已收到您的邮件,将尽快与您联系。</p>";
    echo "</div>";
    echo "</fieldset>";
} else {
    echo '发送失败,请联系 repairs@mysoundrepair.com';
}
?>

额外说明

  • 原代码中header()跳转后的echo内容永远不会执行,因为exit()会终止脚本,可根据需求删除该部分冗余代码。
  • 若需要保留原邮箱正则验证,可保留原isEmail函数,但推荐使用内置filter_var更简洁可靠。

内容的提问来源于stack exchange,提问作者Dion Maurice

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:48:08