one.com托管站点form.php联系表单突发无法发送邮件问题求助
故障根因
one.com近期自动将主机默认PHP版本升级至PHP8+,你的旧代码存在版本兼容问题,会直接中断执行:
- 代码未定义
$subject变量:表单里的subject隐藏字段提交后,PHP代码没有接收该值,调用mail()函数时传入未定义变量,PHP8会直接触发致命错误终止运行;旧版PHP仅会弹出不影响执行的提示,这是之前表单能正常运行的核心原因 - 未做POST字段存在性校验:旧代码直接读取
$_POST内的字段,PHP8下如果字段不存在会直接抛出致命错误 - 邮件头格式不符合新版主机的发信校验规则,即使代码跑通也容易被判定为垃圾邮件拦截
修复方案
不需要修改前端index.html的表单代码,只需要把服务器上原有form.php的内容全部替换为以下代码即可:
<?php /* 设置收件人邮箱 */ $myemail = "info@kongweb.be"; // 校验POST字段完整性,兼容PHP8+ if (!isset($_POST['naam'], $_POST['mail'], $_POST['bericht'], $_POST['subject'])) { show_error("表单提交数据不完整,请重试"); } /* 校验所有表单输入 */ $naam = check_input($_POST['naam'], "请填写您的姓名"); $mail = check_input($_POST['mail'], "请填写您的邮箱"); $bericht = check_input($_POST['bericht'], "请填写留言内容"); $subject = check_input($_POST['subject']); /* 组装邮件内容 */ $message = "Hallo! Wij ontvingen een contactformulier met de volgende gegevens: Naam: $naam E-mailadres: $mail Message: $bericht Einde van dit bericht. "; /* 组装合规邮件头,适配one.com发信规则 */ $headers = "From: info@kongweb.be\r\n"; $headers .= "Reply-To: $mail\r\n"; $headers .= "Content-Type: text/plain; charset=UTF-8\r\n"; /* 发送邮件 */ mail($myemail, $subject, $message, $headers); /* 跳转到感谢页 */ header('Location: bedankt.html'); exit(); /* 工具函数 */ function check_input($data, $problem='') { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); if ($problem && strlen($data) == 0) { show_error($problem); } return $data; } function show_error($myError) { ?> <html> <body> <b>请修正以下错误:</b><br /> <?php echo $myError; ?> </body> </html> <?php exit(); } ?>
验证方式
- 将修改后的
form.php上传覆盖服务器原文件 - 正常提交表单测试,确认可以收到邮件、提交后能正常跳转到bedankt.html页面即可
- 如果替换后仍无法收信,登录one.com主机控制面板确认本地PHP发信权限未被关闭即可,one.com默认开启
mail()函数权限,代码合规即可正常发信。
内容的提问来源于stack exchange,提问作者David Muylaert
相关产品推荐
相关产品推荐

