PHP + SMTP форма + reCaptcha - PullRequest
       8

PHP + SMTP форма + reCaptcha

1 голос
/ 24 июня 2019

Я добавляю Google reCaptcha в эту форму PHPMailer.

Она должна быть отправлена ​​через SMTP.

Как мне проверить reCaptcha и отправить текущую форму?Как, если заявление должно быть написано здесь?

Это код моего файла 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!';
    }
    ?>

1 Ответ

3 голосов
/ 27 июня 2019

Это не так сложно, как кажется, я привел вам пример в комментариях к вашему вопросу.Теперь я немного расскажу.

Примечание: Этот пример не тестировался, но я проверил синтаксис.

enter image description here

Ваш HTML-код в порядке, поэтому никаких изменений не требуется.

Как вы уже знаете, вы только добавляете свой ключ:

<div class="g-recaptcha" data-sitekey="YOUR_KEY"></div>

Сейчасмы получим «данные recaptcha»:

$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 он загрузит данные рекапчи и расшифрует их с помощью 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/

...