2016-05-25 9 views
1

Спасибо за посадку по моему вопросу.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 
} 
?> 
+0

* «скрипт не возвращает ошибки» * - Насколько вы уверены в этом? Вы просто используете '$ mail-> SMTPDebug = 3;', который тестирует SMTP-соединение, но что на стороне PHP? как насчет формы для этого? Вы уверены, что все эти массивы POST оцениваются? который также включал 'if (isset ($ _ POST ['submit']))'. –

+0

Спасибо за ответ, я запускал сценарий локально, и я не получаю никаких ошибок. Также извините за отсутствие ссылки на gist, так как я сделал это, но забыл включить его. Для сокращения я решил придерживаться php в кодовом блоке, и для html я хотел бы сослаться на эту ссылку: https://gist.github.com/Thrizian/42dde0c489c04997867a6fa5afee298b –

+2

Если вы добавите ' RiggsFolly

ответ

0

Моя проблема была в порядке, в котором были переданы PHPMailer аргументы после инициализации «$ почты = новый PHPMailer;».

Что должно быть:

$mail = new PHPMailer; 
$mail->SMTPDebug = 3; 
$mail->isSMTP(); 
$mail->Host  = 'smtp.yourserver.topleveldomain'; 
$mail->Port  = yourportnumber; 
$mail->SMTPSecure = 'yourprotocol'; 
$mail->SMTPAuth = true; 
$mail->Username = 'SmtpUsername'; 
$mail->Password = 'SmtpPassword'; 
$mail->setFrom( '[email protected]', 'Sender Name') 
$mail->addReplyTo( $email_from, '{clean_string($first_name)}{clean_string($last_name)}'); 
//repeat the next line for multiple recipients. 
$mail->addAddress('[email protected]', 'Recipient Name'); 
$mail->Subject = 'mail subject'; 
$mail->Body = $email_message; 

Я также использовал другую переменную для передачи аргументов тела к:

$mail->AltBody = '{$email_message}'; 

который теперь

$mail->Body = $email_message; 

Также редирект из валидатор блокировал появление всех кодов ошибок. Комментируя код Captcha2 php, он легко обнаружил их.