Спасибо за посадку по моему вопросу.PHPMailer, без ошибок
Я пытаюсь создать контактную форму на веб-сайте, я удалённо хостинг.
Я хочу, чтобы форма имела captcha2 и отправляла почту после успешной проверки captcha. Для части рассылки я использую «PHPMailer». Функция «captcha» работает, скрипт не возвращает ошибки, но письма не получаются.
Я пробовал использовать почтовые серверы Google, но безуспешно. Может ли кто-нибудь определить, что это такое, я делаю неправильно? Вот мой PHP код:
<?php
$privkey = "xxxx";
if (isset($_POST['submit'])) {
$url = 'https://www.google.com/recaptcha/api/siteverify';
$response = file_get_contents($url."?secret=". $privkey . "&response=" . $_POST['g-recaptcha-response'] ."&remoteip=" .$_SERVER['REMOTE_ADDR']);
$data = json_decode($response);
if (isset($data->success) AND $data->success == true) {
//VERIFIED CAPTCHA
date_default_timezone_set('Europe/Amsterdam');
require '../scripts/phpmailer/PHPMailerAutoload.php';
if (isset($_POST['email'])) {
// validation expected data exists
if (!isset($_POST['first_name']) ||
!isset($_POST['last_name']) ||
!isset($_POST['email']) ||
!isset($_POST['telephone']) ||
!isset($_POST['comments'])) {
died('Er is een probleem met de volledigheid van de informatie in uw contactformulier.'); //kill script
}
// var's for mailing based upon post input
$first_name = $_POST['first_name']; // required
$last_name = $_POST['last_name']; // required
$email_from = $_POST['email']; // required
$telephone = $_POST['telephone']; // not required
$comments = $_POST['comments']; // required
// _POST DATA VALIDATION
$error_message = "";
// email
$email_exp = '/^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\]))$/iD';
if (!preg_match($email_exp, $email_from)) {
$error_message .= 'Het e-mailadres is niet geldig.<br />';
}
// NAME VALIDATION
$string_exp = "/^[A-Za-z .'-]+$/";
// first name
if (!preg_match($string_exp, $first_name)) {
$error_message .= 'Uw voornaam bevat niet toegestane leestekens.<br />';
}
// last name
if (!preg_match($string_exp, $last_name)) {
$error_message .= 'Uw achernaam bevat niet toegestane leestekens.<br />';
}
// message
if (strlen($comments) < 2) {
$error_message .= 'Het bericht is niet valide.<br />';
}
// STOP SCRIPT IF ERROR IS >0
if (strlen($error_message) > 0) {
died($error_message);
}
$email_message = "Bericht en gegevens hieronder.\n\n";
function clean_string($string)
{
$bad = array(
"content-type",
"bcc:",
"to:",
"cc:",
"href"
);
return str_replace($bad, "", $string);
}
$email_message .= "First Name: " . clean_string(stripslashes($first_name)) . "\n";
$email_message .= "Last Name: " . clean_string(stripslashes($last_name)) . "\n";
$email_message .= "Email: " . clean_string(stripslashes($email_from)) . "\n";
$email_message .= "Telephone: " . clean_string(stripslashes($telephone)) . "\n";
$email_message .= "Comments: " . clean_string(stripslashes($comments)) . "\n";
$mail = new PHPMailer;
$mail->SMTPDebug = 3; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.transip.email'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = '****@amplitudemusic.nl'; // SMTP username
$mail->Password = '*****'; // SMTP password
$mail->SMTPSecure = 'ssl'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 465; // TCP port to connect to
$mail->setFrom('****@amplitudemusic.nl', 'name'); // Sender address
$mail->addAddress('****@amplitudemusic.nl', 'name'); // Recipient 1
$mail->addAddress('[email protected]', 'name'); // Recipient 2
$mail->addReplyTo('****@amplitudemusic.nl', '{clean_string($first_name)} {clean_string($last_name)}'); // Reply Address
$mail->Subject = 'contactformulier website';
$mail->AltBody = '{$email_message}';
if (!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
header('location: contact.php?CaptchaPass=True');
} else {
//not verified
header('location: contact.php?CaptchaFail=True');
}
}
}
}
?>
<html lang=nl>
<head>
<meta charset="utf-8">
<title>Amplitude | Drive in Disco</title>
<meta name="description" content="">
<!-- Mobile-friendly viewport -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Style sheet link -->
<link href="../css/reset.css" rel="stylesheet" media="all">
<link href="../css/main.css" rel="stylesheet" media="all">
<script src='https://www.google.com/recaptcha/api.js'></script>
</head>
<body background="../img/background_website.png">
<div id="background">
<header role="banner" src="../index.php">
<a href="../index.php" alt="Amplitude-Header"><img id="brand" src="../img/transparent.gif"/></a>
<nav role="navigation" position="relative">
<ul class="navbar" >
<li><a href="../index.php">Home</a></li>
<li><a href="prijzen.php">Prijzen</a></li>
<li><a href="contact.php">Contact</a></li>
</ul>
</nav>
</header>
<h2>Contact formulier</h2>
<?php
if (isset($_GET['CaptchaPass'])) {
?>
<h1>Uw mail is succesvol verzonden.</h1>
<?php
}
?>
<?php
if (isset($_GET['CaptchaFail'])) {
?>
<h1>You did not pass the spam validator. Please try again.</h1>
<?php
}
?>
* «скрипт не возвращает ошибки» * - Насколько вы уверены в этом? Вы просто используете '$ mail-> SMTPDebug = 3;', который тестирует SMTP-соединение, но что на стороне PHP? как насчет формы для этого? Вы уверены, что все эти массивы POST оцениваются? который также включал 'if (isset ($ _ POST ['submit']))'. –
Спасибо за ответ, я запускал сценарий локально, и я не получаю никаких ошибок. Также извините за отсутствие ссылки на gist, так как я сделал это, но забыл включить его. Для сокращения я решил придерживаться php в кодовом блоке, и для html я хотел бы сослаться на эту ссылку: https://gist.github.com/Thrizian/42dde0c489c04997867a6fa5afee298b –
Если вы добавите ' Php error_reporting (E_ALL); ini_set ('display_errors', 1); 'на вершину вашего скрипта и не получится никаких ошибок, мы поверим вам – RiggsFolly