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

