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

Bootstrap联系表单提交后重复收邮及PHP脚本问题求助

解决Bootstrap联系表单重复发邮件及reCAPTCHA验证逻辑问题

一、重复收到两份邮件的原因

看你PHP代码里的这段:

if (mail('services@brickboys.com.au', 'Service Enquiry', $body, 'From:' . $email)) {
 echo (mail('services@brickboys.com.au', 'Service Enquiry', $body, 'From:' . $email))."Thanks for contacting us.";
}

这里调用了两次mail()函数:第一次是在if条件判断里,第二次是在echo语句里。只要第一次发送成功,就会触发第二次发送,所以收件箱会收到两份完全一样的邮件。

二、reCAPTCHA验证逻辑错误

当前代码是先处理邮件发送,再验证reCAPTCHA,这完全搞反了顺序。正确的逻辑应该是先验证用户是否通过reCAPTCHA,验证通过后再处理表单数据和发送邮件,否则直接拒绝提交,这样才能有效防止机器人垃圾邮件。

三、修正后的完整PHP代码

<?php
// 先验证reCAPTCHA
if (!isset($_POST['g-recaptcha-response'])) {
    echo "<script>alert('请验证您是人类用户。')</script>";
    exit;
}

$curlx = curl_init();
curl_setopt($curlx, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
curl_setopt($curlx, CURLOPT_HEADER, 0);
curl_setopt($curlx, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curlx, CURLOPT_POST, 1);

$post_data = [
    'secret' => '6LfRXOEhAAAAAOWyRGugvbPdYOhkztlz1aMcEwKP',
    'response' => $_POST['g-recaptcha-response']
];

curl_setopt($curlx, CURLOPT_POSTFIELDS, $post_data);
$resp = json_decode(curl_exec($curlx));
curl_close($curlx);

if (!$resp->success) {
    echo "<script>alert('请验证您是人类用户。')</script>";
    exit;
}

// reCAPTCHA验证通过后,处理表单数据
if (isset($_POST['name']) && isset($_POST['email']) && isset($_POST['tel']) && isset($_POST['loc']) && isset($_POST['message'])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $tel = $_POST['tel'];
    $loc = $_POST['loc'];
    $message = $_POST['message'];

    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        echo "请提供有效的邮箱地址。";
    } else {
        $body = $name . "\n" . $email . "\n" . $tel . "\n" .  $loc . "\n" . $message;
        // 只调用一次mail函数
        if (mail('services@brickboys.com.au', 'Service Enquiry', $body, 'From:' . $email)) {
            echo "<script>alert('感谢您的联系,我们会尽快回复您。')</script>";
        } else {
            echo "<script>alert('抱歉!发送邮件时出现问题,请致电 +61 452 534 200 联系我们。')</script>";
        }
    }
} else {
    echo '消息无法发送。';
}
?>

四、补充说明

  • HTML部分代码无问题,无需修改。
  • 修正后的代码先执行reCAPTCHA验证,拦截机器人提交;再处理表单数据并仅调用一次mail()函数,彻底解决重复发邮件的问题。
  • 若邮件仍发送失败,可能需要检查服务器的邮件服务配置(mail()函数依赖服务器邮件环境)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:10:34