PHP + SMTP 表单 + reCaptcha
PHP + SMTP form + reCaptcha
我正在向此 PHPMailer 表单添加 Google reCaptcha。
应该通过SMTP发送。
我应该如何验证 reCaptcha 并发送当前表单?这里的if语句应该怎么写?
这是我的 index.html 文件的代码:
<form class="form-subscribe" action="mail.php" method="post">
<div class="container">
<div class="row">
<input type="text" class="form-control col-md-5 form-name" name="name" placeholder="Ваше имя" required>
<div class="col-md-1"></div>
<input type="text" class="form-control col-md-6 form-email" name="email" placeholder="Ваша эл. почта" required>
<textarea type="text" class="form-control form-text bg-gray col-md-12" name="message" placeholder="Ваше сообщение" required></textarea>
</div>
<div class="input-group-append">
<div class="g-recaptcha" data-sitekey=""></div>
<button class="button button-shadow2" type="submit" name="submit">Отправить</button>
</div>
</div>
</form>
这是 mail.php 文件的代码:
<?php
require_once('phpmailer/PHPMailerAutoload.php');
$mail = new PHPMailer;
$mail->CharSet = 'utf-8';
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = '';
$mail->Password = '';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail->setFrom($email);
$mail->addAddress('');
$mail->isHTML(true);
$mail->Subject = 'Сообщение с сайта';
$mail->Body = '' .$name . ' оставил заявку, его телефон ' .$email. '<br>Сообщение этого посетителя: ' .$message;
$mail->AltBody = '';
if(!$mail->send()) {
echo 'Message sent!';
} else {
echo 'Error!';
}
?>
它并不像看起来那么复杂,
我在你的问题的评论中给了你一个例子。
现在我将给你一点介绍。
注意:此示例未经过测试,但我进行了语法检查。
您的 html 代码没有问题,因此无需更改。
如您所知,您只需添加密钥:
<div class="g-recaptcha" data-sitekey="YOUR_KEY"></div>
现在我们将得到 "recaptcha data":
$response = $_POST["g-recaptcha-response"];
$url = 'https://www.google.com/recaptcha/api/siteverify';
Recptcha 需要一些数据来验证验证码:
$data = array(
'secret' => 'YOUR_SECRET',
'response' => $_POST["g-recaptcha-response"]
);
$options = array(
'http' => array (
'method' => 'POST',
'content' => http_build_query($data)
)
);
接下来脚本必须获取所有数据并验证验证码,
使用 file_get_contents
它将加载 recaptcha 数据和
用 json:
解码
$context = stream_context_create($options);
$verify = file_get_contents($url, false, $context);
$captcha_success=json_decode($verify);
至少我们需要一个 if 循环来检查验证码是否有效:
if ($captcha_success->success==false) {
echo "false";
} else if ($captcha_success->success==true) {
echo "true";
}
下一步又快又麻烦:
if ($captcha_success->success==false) {
echo "Captcha wrong";
} else if ($captcha_success->success==true) {
if(!$mail->send()) {
echo 'Message sent!';
} else {
echo 'Error!';
}
}
所以完整的代码如下所示:
require_once('phpmailer/PHPMailerAutoload.php');
$mail = new PHPMailer;
$mail->CharSet = 'utf-8';
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = '';
$mail->Password = '';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail->setFrom($email);
$mail->addAddress('');
$mail->isHTML(true);
$mail->Subject = 'Сообщение с сайта';
$mail->Body = '' .$name . ' оставил заявку, его телефон ' .$email. '<br>Сообщение этого посетителя: ' .$message;
$mail->AltBody = '';
$response = $_POST["g-recaptcha-response"];
$url = 'https://www.google.com/recaptcha/api/siteverify';
$data = array(
'secret' => 'YOUR_SECRET',
'response' => $_POST["g-recaptcha-response"]
);
$options = array(
'http' => array (
'method' => 'POST',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
$verify = file_get_contents($url, false, $context);
$captcha_success=json_decode($verify);
if ($captcha_success->success==false) {
echo "Captcha wrong";
} else if ($captcha_success->success==true) {
if(!$mail->send()) {
echo 'Message sent!';
} else {
echo 'Error!';
}
}
这里是原教程(json):
https://www.kaplankomputing.com/blog/tutorials/recaptcha-php-demo-tutorial/
此页面也提供了 ajax 教程:
https://www.kaplankomputing.com/blog/tutorials/php/setting-recaptcha-2-0-ajax-demotutorial/
我正在向此 PHPMailer 表单添加 Google reCaptcha。
应该通过SMTP发送。
我应该如何验证 reCaptcha 并发送当前表单?这里的if语句应该怎么写?
这是我的 index.html 文件的代码:
<form class="form-subscribe" action="mail.php" method="post">
<div class="container">
<div class="row">
<input type="text" class="form-control col-md-5 form-name" name="name" placeholder="Ваше имя" required>
<div class="col-md-1"></div>
<input type="text" class="form-control col-md-6 form-email" name="email" placeholder="Ваша эл. почта" required>
<textarea type="text" class="form-control form-text bg-gray col-md-12" name="message" placeholder="Ваше сообщение" required></textarea>
</div>
<div class="input-group-append">
<div class="g-recaptcha" data-sitekey=""></div>
<button class="button button-shadow2" type="submit" name="submit">Отправить</button>
</div>
</div>
</form>
这是 mail.php 文件的代码:
<?php
require_once('phpmailer/PHPMailerAutoload.php');
$mail = new PHPMailer;
$mail->CharSet = 'utf-8';
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = '';
$mail->Password = '';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail->setFrom($email);
$mail->addAddress('');
$mail->isHTML(true);
$mail->Subject = 'Сообщение с сайта';
$mail->Body = '' .$name . ' оставил заявку, его телефон ' .$email. '<br>Сообщение этого посетителя: ' .$message;
$mail->AltBody = '';
if(!$mail->send()) {
echo 'Message sent!';
} else {
echo 'Error!';
}
?>
它并不像看起来那么复杂, 我在你的问题的评论中给了你一个例子。 现在我将给你一点介绍。
注意:此示例未经过测试,但我进行了语法检查。
您的 html 代码没有问题,因此无需更改。
如您所知,您只需添加密钥:
<div class="g-recaptcha" data-sitekey="YOUR_KEY"></div>
现在我们将得到 "recaptcha data":
$response = $_POST["g-recaptcha-response"];
$url = 'https://www.google.com/recaptcha/api/siteverify';
Recptcha 需要一些数据来验证验证码:
$data = array(
'secret' => 'YOUR_SECRET',
'response' => $_POST["g-recaptcha-response"]
);
$options = array(
'http' => array (
'method' => 'POST',
'content' => http_build_query($data)
)
);
接下来脚本必须获取所有数据并验证验证码,
使用 file_get_contents
它将加载 recaptcha 数据和
用 json:
$context = stream_context_create($options);
$verify = file_get_contents($url, false, $context);
$captcha_success=json_decode($verify);
至少我们需要一个 if 循环来检查验证码是否有效:
if ($captcha_success->success==false) {
echo "false";
} else if ($captcha_success->success==true) {
echo "true";
}
下一步又快又麻烦:
if ($captcha_success->success==false) {
echo "Captcha wrong";
} else if ($captcha_success->success==true) {
if(!$mail->send()) {
echo 'Message sent!';
} else {
echo 'Error!';
}
}
所以完整的代码如下所示:
require_once('phpmailer/PHPMailerAutoload.php');
$mail = new PHPMailer;
$mail->CharSet = 'utf-8';
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = '';
$mail->Password = '';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail->setFrom($email);
$mail->addAddress('');
$mail->isHTML(true);
$mail->Subject = 'Сообщение с сайта';
$mail->Body = '' .$name . ' оставил заявку, его телефон ' .$email. '<br>Сообщение этого посетителя: ' .$message;
$mail->AltBody = '';
$response = $_POST["g-recaptcha-response"];
$url = 'https://www.google.com/recaptcha/api/siteverify';
$data = array(
'secret' => 'YOUR_SECRET',
'response' => $_POST["g-recaptcha-response"]
);
$options = array(
'http' => array (
'method' => 'POST',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
$verify = file_get_contents($url, false, $context);
$captcha_success=json_decode($verify);
if ($captcha_success->success==false) {
echo "Captcha wrong";
} else if ($captcha_success->success==true) {
if(!$mail->send()) {
echo 'Message sent!';
} else {
echo 'Error!';
}
}
这里是原教程(json): https://www.kaplankomputing.com/blog/tutorials/recaptcha-php-demo-tutorial/
此页面也提供了 ajax 教程: https://www.kaplankomputing.com/blog/tutorials/php/setting-recaptcha-2-0-ajax-demotutorial/