2016-05-25 15 views
1

Danke für die Landung bei meiner Frage.PHPMailer, keine Fehler

Ich versuche ein Kontaktformular auf einer Website zu erstellen, die ich remote hostet.

Ich möchte das Formular ein Captcha2 und eine E-Mail senden, nachdem das Captcha erfolgreich getestet wurde. Für den Mailing Teil benutze ich "PHPMailer" Das Captcha funktioniert, das Skript gibt keine Fehler zurück und es werden keine Mails empfangen.

Ich habe versucht, die Google Mail-Server, aber ohne Erfolg. Kann mir jemand auffallen, was ich falsch mache? Hier ist meine PHP-Code:

<?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

* "Das Skript gibt keine Fehler zurück" * - Wie sicher bist du das? Sie verwenden nur '$ mail-> SMTPDebug = 3;' was auf eine SMTP-Verbindung testet, aber was ist mit PHP? Was ist mit der Form dafür? Bist du sicher, dass all diese POST-Arrays ausgewertet werden? was auch 'if (isset ($ _ POST ['submit']))' beinhaltet. –

+0

Danke für die Antwort, ich habe das Skript lokal ausgeführt und ich bekomme keine Fehler. Auch Entschuldigung für die nicht einschließlich der wichtigsten URL, seit ich es gemacht habe, aber vergessen, es aufzunehmen. Zur Abkürzung habe ich beschlossen, mit dem PHP in einem Codeblock zu bleiben und für den HTML wollte ich auf diesen Link verweisen: https://gist.github.com/Thrizian/42dde0c489c04997867a6fa5afee298b –

+2

Wenn Sie ' RiggsFolly

Antwort

0

Mein Problem war die Reihenfolge, in der Argumente PHPmailer geben wurden nach der Initialisierung "$ mail = new PHPMailer;".

Welche sein sollte:

$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; 

ich auch andere Variable, um den Körper Argument zu übergeben verwendet habe:

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

die jetzt

$mail->Body = $email_message; 

ist auch die Umleitung von Der Validator blockierte alle Fehlercodes. Den Captcha2-PHP-Code zu kommentieren machte es einfach, sie zu erkennen.