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

如何在Google隐形reCAPTCHA验证通过后执行sendmail.php脚本?

如何把Google隐形reCAPTCHA整合到PHPMailer发送脚本中

当然可以!其实你完全不需要分开两个脚本,只需要把reCAPTCHA的验证逻辑提前放到你的sendmail.php里,确保只有验证通过的请求才会触发邮件发送。下面是具体的整合步骤和代码示例:

步骤1:整合验证逻辑到sendmail.php

把你提供的reCAPTCHA验证函数和判断逻辑,放到sendmail.php的最顶部,然后在PHPMailer的发送代码之前先做验证。

整合后的完整sendmail.php示例如下:

<?php
// 第一步:reCAPTCHA验证函数
function post_captcha($user_response) {
    $fields_string = '';
    $fields = array(
        'secret' => '________________SECRET_KEY_______________', // 替换成你的reCAPTCHA秘钥
        'response' => $user_response
    );

    foreach($fields as $key=>$value) {
        $fields_string .= $key . '=' . $value . '&';
    }
    $fields_string = rtrim($fields_string, '&');

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/recaptcha/api/siteverify');
    curl_setopt($ch, CURLOPT_POST, count($fields));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $result = curl_exec($ch);
    curl_close($ch);

    return json_decode($result, true);
}

// 第二步:执行reCAPTCHA验证
if (!isset($_POST['g-recaptcha-response'])) {
    // 如果前端没传验证响应,直接返回错误
    echo '请完成reCAPTCHA验证!';
    exit;
}

$res = post_captcha($_POST['g-recaptcha-response']);
if (!$res['success']) {
    // 验证失败的处理
    echo 'reCAPTCHA验证失败:请检查你的密钥是否匹配域名,或者代码是否有拼写错误。';
    exit;
}

// 第三步:验证通过后,执行PHPMailer发送逻辑
// 这里放你的PHPMailer代码示例(根据你的实际代码调整)
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'path/to/PHPMailer/src/Exception.php';
require 'path/to/PHPMailer/src/PHPMailer.php';
require 'path/to/PHPMailer/src/SMTP.php';

$mail = new PHPMailer(true);

try {
    // 服务器配置
    $mail->SMTPDebug = 0;                      // 调试模式关闭
    $mail->isSMTP();                                            // 使用SMTP
    $mail->Host       = 'smtp.example.com';                     // SMTP服务器
    $mail->SMTPAuth   = true;                                   // 启用SMTP认证
    $mail->Username   = 'your-email@example.com';               // SMTP用户名
    $mail->Password   = 'your-email-password';                   // SMTP密码
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            // 启用TLS加密
    $mail->Port       = 465;                                    // TCP端口

    // 收件人
    $mail->setFrom('from@example.com', 'Mailer');
    $mail->addAddress('recipient@example.com', 'Recipient');     // 收件人

    // 邮件内容
    $mail->isHTML(true);                                        // 邮件格式为HTML
    $mail->Subject = '来自表单的消息';
    $mail->Body    = '这是用户通过表单发送的消息内容';
    $mail->AltBody = '这是纯文本格式的备用内容';

    $mail->send();
    echo '邮件发送成功!';
} catch (Exception $e) {
    echo "邮件发送失败:{$mail->ErrorInfo}";
}
?>

额外注意事项

  • 确保你的前端表单里已经正确添加了reCAPTCHA的代码,比如:
    <form action="sendmail.php" method="POST">
        <!-- 你的表单字段 -->
        <input type="text" name="name" placeholder="你的姓名">
        <input type="email" name="email" placeholder="你的邮箱">
        <!-- reCAPTCHA组件 -->
        <div class="g-recaptcha" data-sitekey="你的站点密钥"></div>
        <button type="submit">提交</button>
    </form>
    <script src="https://www.google.com/recaptcha/api.js" async defer></script>
    
  • 替换代码中的SECRET_KEY和站点密钥为你在Google reCAPTCHA控制台获取的真实密钥
  • 确保你的服务器支持cURL(大部分主机都支持,如果不支持可以联系主机商开启)

这样调整后,只有当用户成功完成reCAPTCHA验证时,PHPMailer的发送逻辑才会执行,完美解决你的需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:35:23