【问题标题】:reCAPTCHA and PHP to send an Email FormreCAPTCHA 和 PHP 发送电子邮件表单
【发布时间】:2015-02-02 08:16:18
【问题描述】:

我使用 GoDaddy 作为我的网络服务器。

我正在尝试在我的网站电子邮件表单中实施 reCAPTCHA,但它似乎无法正常工作。也就是说,我通过了 reCAPTCHA 测试,但没有发送电子邮件。

到目前为止,我只在网站上使用了 PHP 和 HTML。

我还将脚本添加到我的 head 标签中

<script src='https://www.google.com/recaptcha/api.js'></script>

这里是代码sn-ps。

HTML:

<form action="#" id="form" method="post" name="form">
      <div class="form-group">
             <label for="name-field">Name</label>
             <input name="vname" class="form-control" placeholder="Enter Your Full Name" type="text" value="">
      </div>
      <div class="form-group">
             <label for="email-field">Email address</label>
             <input name="vemail" class="form-control" placeholder="Enter Your Email" type="text" value="">
      </div>
      <div class="form-group">
             <label for="contract-field">Enter Contract Here</label>
             <textarea name="msg" class="form-control" placeholder="Enter Contract Here" rows="5"></textarea>
      </div>
      <div class="g-recaptcha form-group" data-sitekey="SITEKEY"></div>
      <div class="form-group"><button id="send" name="submit" type="submit" class="btn btn-default">Submit</button></div>
</form>

PHP:

<?php
//Checking For reCAPTCHA
$captcha;
if(isset($_POST['g-recaptcha-response'])){
    $captcha=$_POST['g-recaptcha-response'];
}
// Checking For correct reCAPTCHA
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=SECRETKEY&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
if($response.success==false){
    echo "Your CAPTCHA response was wrong."
    exit;
}
else{
    // Checking For Blank Fields..
    if($_POST["vname"]==""||$_POST["vemail"]==""||$_POST["msg"]==""){
        echo "Fill All Fields..";
    }
    else{
        // Check if the "Sender's Email" input field is filled out
        $email=$_POST['vemail'];
        // Sanitize E-mail Address
        $email =filter_var($email, FILTER_SANITIZE_EMAIL);
        // Validate E-mail Address
        $email= filter_var($email, FILTER_VALIDATE_EMAIL);
        if (!$email){
            echo "Invalid Sender's Email";
        }
        else{
            $to = 'johdoe@example.com';
            $subject = 'Test';
            $message = $_POST['msg'];
            $headers = 'From:'. $email . "\r\n"; // Sender's Email
            // Message lines should not exceed 70 characters (PHP rule), so wrap it
            $message = wordwrap($message, 70, "\r\n");
            // Send Mail By PHP Mail Function
            mail($to, $subject, $message, $headers);
            echo "Your mail has been sent successfully!";
        }
    }
} else {
    echo "Your CAPTCHA response was wrong.  Try again."
    exit;
}?>

我是否在执行服务器端错误?还是客户端?

【问题讨论】:

    标签: php html email


    【解决方案1】:

    您的代码在 if 和 else 中有语法错误。只需按照下面给出的代码重写您的代码并尝试它。

    <?php
    //Checking For reCAPTCHA
    $captcha;
    if (isset($_POST['g-recaptcha-response'])) {
        $captcha = $_POST['g-recaptcha-response'];
    }
    // Checking For correct reCAPTCHA
    $response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=SECRETKEY&response=" . $captcha . "&remoteip=" . $_SERVER['REMOTE_ADDR']);
    if (!$captcha || $response.success == false) {
        echo "Your CAPTCHA response was wrong.";
        exit ;
    } else {
        // Checking For Blank Fields..
        if ($_POST["vname"] == "" || $_POST["vemail"] == "" || $_POST["msg"] == "") {
            echo "Fill All Fields..";
        } else {
            // Check if the "Sender's Email" input field is filled out
            $email = $_POST['vemail'];
            // Sanitize E-mail Address
            $email = filter_var($email, FILTER_SANITIZE_EMAIL);
            // Validate E-mail Address
            $email = filter_var($email, FILTER_VALIDATE_EMAIL);
            if (!$email) {
                echo "Invalid Sender's Email";
            } else {
                $to = 'johdoe@example.com';
                $subject = 'Test';
                $message = $_POST['msg'];
                $headers = 'From:' . $email . "\r\n";
                // Sender's Email
                // Message lines should not exceed 70 characters (PHP rule), so wrap it
                $message = wordwrap($message, 70, "\r\n");
                // Send Mail By PHP Mail Function
                if (mail($to, $subject, $message, $headers)) {
                    echo "Your mail has been sent successfully!";
                } else {
                    echo "Failed to send email, try again.";
                    exit ;
                }
            }
        }
    }
    ?>
    

    【讨论】:

    • 我能够发送和接收电子邮件,但现在的问题是我可以忽略 reCAPTCHA。知道为什么吗?
    • 好的,我编辑代码再写一遍,5分钟后看看
    • 我解决了!我把这个if ($response . success == false) { 变成了这个if (!$captcha || $response.success == false) {。感谢您的帮助:)
    • 酷,实际上 $response.success 无关紧要。每次都返回 true。
    猜你喜欢
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多