Я сделал контактную форму на моем сайте друзья и все работает правильно, но он получает много спам-предложений, как Bitcoins / порно и др c. Я попытался настроить reCAPTCHA, но это не сработало.
Я использую PHPMailer (ранее я использовал google API для почты, но такая форма получает гораздо больше спам-предложений), и я не могу найти способ защиты от ботов.
Мне интересно - может быть, проблема в том, что почтовый скрипт работает в фоновом режиме после нажатия кнопки отправки? Может быть, поэтому он пропустил reCAPTCHA.
Я перепробовал все - изменил максимальную длину входов, их имена ... Моя последняя попытка была такой повторяющейся:
https://github.com/anhskohbo/no-captcha
Мой код:
ТОП индекса. php:
<?php
require_once "vendor/autoload.php";
$secret = '*****';
$sitekey = '*****';
$captcha = new \Anhskohbo\NoCaptcha\NoCaptcha($secret, $sitekey);
if ( isset($_POST['submit'])) {
if($captcha->verifyResponse($_POST['g-recaptcha-response'])) {
//proceed further
} else {
echo "Incorrect captcha";
}
}
?>
Моя форма:
<form name="test" role="form" action="sendmail.php" method="POST" onSubmit="alert('Dziękujemy za kontakt :)'); window.location.reload();" >
<div class="row">
<div class="col span-1-of-3">
<label>Imię i nazwisko:</label>
</div>
<div class="col span-2-of-3">
<input maxlength="30" name="a1" required="required" type="text" placeholder="Imię i nazwisko" required/>
</div>
</div>
<div class="row">
<div class="col span-1-of-3">
<label>E-mail:</label>
</div>
<div class="col span-2-of-3">
<input maxlength="30" name="a2" required="required" type="email" placeholder="E-mail" required/>
</div>
</div>
<div class="row">
<div class="col span-1-of-3">
<label>Telefon:</label>
</div>
<div class="col span-2-of-3">
<input maxlength="30" name="a3" required="required" type="text" placeholder="Numer telefonu" required/>
</div>
</div>
<div class="row">
<div class="col span-1-of-3">
<label>Temat:</label>
</div>
<div class="col span-2-of-3">
<input maxlength="30" name="a4" required="required" type="text" placeholder="Temat wiadomości" required/>
</div>
</div>
<div class="row">
<div class="col span-1-of-3">
<label>Wiadomość:</label>
</div>
<div class="col span-2-of-3">
<textarea name="a5" placeholder="Wiadomość"></textarea>
</div>
</div>
<div class="row">
<div class="col span-1-of-3">
<label> </label>
</div>
<div class="col span-2-of-3">
<?php echo $captcha->display(); ?>
<input name="myFormSubmitted" type="submit" value="Wyślij" style="margin-top:10px;">
</div>
</div>
</form>
<?php echo $captcha->renderJs(); ?>
Sendmail. php:
<?php
/**
* This example shows settings to use when sending via Google's Gmail servers.
* This uses traditional id & password authentication - look at the gmail_xoauth.phps
* example to see how to use XOAUTH2.
* The IMAP section shows how to save this message to the 'Sent Mail' folder using IMAP commands.
*/
//Import PHPMailer classes into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use FormGuide\Handlx\FormHandler;
require 'vendor/autoload.php';
//Create a new PHPMailer instance
$mail = new PHPMailer;
//Tell PHPMailer to use SMTP
$mail->isSMTP();
//Enable SMTP debugging
// SMTP::DEBUG_OFF = off (for production use)
// SMTP::DEBUG_CLIENT = client messages
// SMTP::DEBUG_SERVER = client and server messages
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
//Set the hostname of the mail server
$mail->Host = 'smtp.gmail.com';
// use
// $mail->Host = gethostbyname('smtp.gmail.com');
// if your network does not support SMTP over IPv6
//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
$mail->Port = 587;
$mail->CharSet = "UTF-8";
//Set the encryption mechanism to use - STARTTLS or SMTPS
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
//Username to use for SMTP authentication - use full email address for gmail
$mail->Username = '*****';
//Password to use for SMTP authentication
$mail->Password = '*****';
//Set who the message is to be sent from
$mail->setFrom('from@example.com');
//Set an alternative reply-to address
$mail->addReplyTo( $_POST['mail']);
//Set who the message is to be sent to
$mail->addAddress('****');
$mail->IsHTML(true);
if ($mail->addReplyTo($_POST['a2'], $_POST['a1'])) {
$mail->Subject = 'Formularz kontaktowy - Cargo-trans.biz';
//Keep it simple - don't use HTML
//$mail->isHTML(false);
//Build a simple message body
$mail->Body = <<<EOT
<p style="margin-bottom:10px;"><b>Imię i naziwsko:</b> {$_POST['a1']} </p>
<br>
<p style="margin-bottom:10px;"><b>E-mail:</b> {$_POST['a2']} </p>
<br>
<p style="margin-bottom:10px;"><b>Telefon kontaktowy:</b> {$_POST['a3']} </p>
<br>
<p style="margin-bottom:10px;"><b>Temat:</b> {$_POST['a4']} </p>
<br>
<p style="margin-bottom:10px;"><b>Wiadomość:</b> {$_POST['a5']} </p>
<br>
<img src = "http://cargo-trans.biz/resources/img/napis.png" style="margin-top:10px;">
EOT;
//Send the message, check for errors
if (!$mail->send()) {
//The reason for failing to send will be in $mail->ErrorInfo
//but you shouldn't display errors to users - process the error, log it on your server.
$msg = 'Sorry, something went wrong. Please try again later.';
} else {
$msg = 'Message sent! Thanks for contacting us.';
}
} else {
$msg = 'Invalid email address, message ignored.';
}
?>