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

现有联系表单集成Recaptcha时PHP报500错误但邮件发送正常问题求解

问题根源

你遇到的500错误核心是两个PHP语法/逻辑问题,邮件可正常发送是因为PHP为解释执行的语言,致命错误触发前的代码都会正常运行,发信逻辑执行完成后才触发错误返回500:

  1. 命名空间导入语句位置错误
    PHP语法强制要求所有use开头的命名空间导入语句必须放在PHP文件最顶部,不能嵌套在if/else等代码块中。你当前将use VanillaForm\MailSender;和use VanillaForm\Utils;放在了验证码验证通过的else if代码块内,属于语法错误,会直接触发PHP致命错误返回500。
  2. 缺少reCAPTCHA接口请求容错处理
    当服务器请求谷歌reCAPTCHA验证接口超时、失败时,file_get_contents会返回false,json_decode后得到的是null,此时直接访问$captcha_success->success会触发「尝试访问非对象属性」的致命错误,同样会返回500。

修复步骤

按照以下顺序修改代码即可解决问题:

步骤1:移动导入语句到文件顶部

将以下四行代码剪切到PHP文件的最开头($response = $_POST["g-recaptcha-response"];的前面),同时删除else if块内的重复代码:

use VanillaForm\MailSender;
use VanillaForm\Utils;

require_once('inc/Utils.php');
require_once('inc/MailSender.php');

header('Access-Control-Allow-Origin: *');

步骤2:增加验证码验证容错逻辑

将原有验证码判断代码:

if ($captcha_success->success==false) {
    echo "<p>You are a bot! Go away!</p>";
} else if ($captcha_success->success==true) {

替换为如下代码,同时删除原有else if对应的闭合大括号:

// 验证接口返回异常、验证不通过都直接拦截
if (is_null($captcha_success) || !isset($captcha_success->success) || !$captcha_success->success) {
    echo "<p>验证码验证失败,请刷新页面重试。</p>";
    exit;
}

可选排查方案

如果修改完成后仍存在500错误,可临时在PHP文件最顶部添加以下两行代码,页面会输出具体的错误信息方便定位:

error_reporting(E_ALL);
ini_set('display_errors', 1);

问题修复后请删除这两行代码,避免泄露服务器敏感信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:24:05