为什么reCAPTCHA导致我的PHP邮件功能不起作用?

时间:2016-12-10 01:38:14

标签: php email recaptcha

我最近注意到我所有网站上的发送邮件表单都停止了工作。我删除了reCAPTCHA代码并再次运行。经过一些研究,我意识到我正在使用谷歌的旧版reCAPTCHA v1.0,所以我想这可能是问题所在。虽然在设置reCAPTCHA v2.0后我遇到了同样的问题。 reCAPTCHA在某种程度上起作用,因为当我检查它并收到错误消息时,我仍然收到消息“此语句已被执行”,“当我不这样做时,请返回并确保完成安全CAPTCHA”它不会发送电子邮件。

注意:我已检查过我的垃圾邮件文件夹。 PHP代码位于页面顶部(不确定这是否重要)。电子邮件在没有reCAPTCHA代码的情况下完全按照原样发送。

<?php
$url = 'https://www.google.com/recaptcha/api/siteverify';
$privatekey = 'xxxxxxxxxxxxxPRIVATExKEYxxxxxxxxxxxxxxxx';
$response = file_get_contents($url.'?secret='.$privatekey.'&response='.$_POST['g-recaptcha-response'].'&remoteip'.$_SERVER['REMOTE_ADDR']);
$data = json_decode($response);

if (isset($data->success) AND $data->success == true) {

    $senderEmail = $_POST["emailfeed"];
    $recipient = "myemail@gmail.com";
    $subject = $_POST["subject"];
    $headers = "From: Feedback <$senderEmail>\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=utf-8\r\n";

    $body ='Hello World';

    mail($recipient,$subject,$body,$headers);
    echo 'This statement was executed.';

} else {
    echo '<p>Please go back and make sure you complete the security CAPTCHA.</p>';
} ?>

编辑:我仍然没有弄明白,但通过测试,我已将其缩小到导致问题的代码行。它与file_get_contents()函数中的文本有关。由于某种原因,url请求导致邮件功能无法正常工作。虽然,网址似乎是正确的,因为recaptcha仍然有效,只是没有邮件功能。

编辑:问题解决了!看起来这个问题可能是因为使用网址而不是POST将数据作为GET请求发送。我最初遵循YouTube教程,虽然它适用于他们,但它对我不起作用,因为我需要使用mail()函数。从reddit(r / phphelp)那里向Ramse大喊,他帮助我解决了这个问题!这是工作代码:

<?php
function post_captcha($user_response) {
    $fields_string = '';
    $fields = array(
        'secret' => '---------PRIVATE--KEY----------',
        '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);
}

// Call the function
$res = post_captcha($_POST['g-recaptcha-response']);
echo $res.'<br><br>';

if(!$res['success']){
    // If not captcha isn't successfully completed
    echo 'Please go back and make sure you check the security CAPTCHA box.<br><br>';
} else {
    // If captcha is successfully completed
    $senderEmail = "senderemail@gmail.com";
    $recipient = "recipient@gmail.com";
    $subject = "Example Subject";
    $headers = "From: Feedback <$senderEmail>";

    $body = $_POST["messagefeed"];

    mail($recipient,$subject,$body,$headers);

    echo 'Your message has been sent!<br><br>';
}

&GT;

0 个答案:

没有答案