我最近注意到我所有网站上的发送邮件表单都停止了工作。我删除了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;