如何在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
相关产品推荐
相关产品推荐

