2016-03-27 10 views
0

Ich versuche, eine Bestätigungs-E-Mail zu senden, nachdem der Benutzer ein Konto erstellt hat. Die E-Mail sendet nichts. Ich habe es getestet und die E-Mail geht nicht einmal in den Spam- oder Posteingangsordner. Fehle ich etwas? Danke für Ihre Hilfe.Ich kann keine E-Mail mit PHP senden

$status = ""; 
    if (isset($_POST["sign_up"])) { 
     $first_name  = (isset($_POST['first_name']) ? $_POST['first_name'] : null); 
     $last_name  = (isset($_POST['last_name']) ? $_POST['last_name'] : null); 
     $username  = (isset($_POST['username']) ? $_POST['username'] : null); 
     $password  = (isset($_POST['password']) ? $_POST['password'] : null); 
     $email   = (isset($_POST['email']) ? $_POST['email'] : null); 
     $phone   = (isset($_POST['phone']) ? $_POST['phone'] : null); 

     if ($first_name == "" || $last_name == "" || $username == "" || $password == "" || $email == "" || $phone == "") { 
      $status = '<p style="color:#FF0000;">Please fill out all the field'; 
     } else if (strlen($password) < 6) { 
      $status = '<p style="color:#FF0000;">Password must more than 6 characters'; 
     } else{ 
      $sql = "INSERT INTO members(
       first_name, 
       last_name, 
       username, 
       password, 
       email, 
       phone 
       ) VALUES (
       '$first_name', 
       '$last_name', 
       '$username', 
       '$password', 
       '$email', 
       '$phone' 
       )"; 

      $res = mysqli_query($mysqli,$sql) or die(mysqli_error()); 
      if ($res) { 
       $to   = $email; 
       $subject = "Confirmation from Yu Fong to $username"; 
       $from  = "[email protected]"; 
       $message = "Please click the link below to verify and activate your account. \r\n"; 
       $message .= "Testing"; 
       $header  = "From: " .$from. "\r\n"; 
       $header  .="Reply-To: ".$from. "\r\n"; 
       $header  .= "CC: [email protected]\r\n"; 
       $header  .= "Return-Path: ".$from. "\r\n"; 
       $header  .= "MIME-Version: 1.0\r\n"; 
       $header  .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 
       $header  .= "X-Priority: 3\r\n"; 
       $header  .= "X-Mailer: PHP". phpversion() ."\r\n"; 


       $sentmail = mail($to, $subject, $message, $header); 

       if ($sentmail == true) { 
        echo $status = '<p style="color:#FF0000;">Congratulations! Your account has been created. An confirmation email has been sent!'; 
       } else { 
        echo "Eror!"; 
       } 
      } 
     } 
    } 
+1

Mögliche Duplikat [PHP Mail-Formular ausfüllen nicht das Versenden von E-Mail] (http://stackoverflow.com/questions/24644436/php-mail-form-doesnt-complete-sending-e-mail) – Chris

+1

Einige Mail-Anbieter, um Spam zu verhindern, werden Mail ablehnen, wenn die sendende IP-Adresse eine umgekehrte DNS-Suche nicht besteht. Könnte das die Ursache sein? Überprüfen Sie Ihr lokales Postfach oder die Protokolle Ihrer SMTP-Software. –

+0

@TylerCrompton Ich denke DNS könnte die Ursache sein. Ich habe die E-Mail aber im Spam-Ordner, wie kann ich verhindern, dass dies passiert? Vielen Dank. –

Antwort

0

Ich habe gerade Ihr E-Mail-Formular getestet, es funktioniert perfekt, ich habe die E-Mail.

$to   = "[email protected]"; 
$subject = "Confirmation from Yu Fong to $username"; 
$from  = "derpington"; 
$message = "Please click the link below to verify and activate your account. \r\n"; 
$message .= "Testing"; 
$header  = "From: " .$from. "\r\n"; 
$header  .="Reply-To: ".$from. "\r\n"; 
$header  .= "CC: [email protected]\r\n"; 
$header  .= "Return-Path: ".$from. "\r\n"; 
$header  .= "MIME-Version: 1.0\r\n"; 
$header  .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 
$header  .= "X-Priority: 3\r\n"; 
$header  .= "X-Mailer: PHP". phpversion() ."\r\n"; 


$sentmail = mail($to, $subject, $message, $header); 

if ($sentmail == true) { 
    echo $status = '<p style="color:#FF0000;">Congratulations! Your account has been created. An confirmation email has been sent!'; 
} else { 
    echo "Eror!"; 
} 

Dies ist nur Ihre Form, und es funktioniert so gehe davon aus ich das Problem von einem anderen Ort kommt, versuchen

Wechsel
if ($res) { 

zu

if (1+1 == 2) { 

nur Ihre überprüfen, ob Wenn die Anweisung tatsächlich true ausgibt, und von dort aus geht.

-1

Try

if ($sentmail == true) { ... 

zu

if ($sentmail) { ... 

ändern oder es ein bisschen zu verkürzen versuchen

if(@mail($to, $subject, $message, $headers)) 

    { 
     echo "Mail Sent Successfully"; 
    }else{ 
     echo "Mail Not Sent"; 
    } 
+4

Bitte ermutigen Sie nicht, den Fehlerunterdrückungsoperator zu verwenden. Es verursacht mehr Kopfschmerzen als Probleme, die es löst. Und Ihre erste Empfehlung würde keinen Unterschied machen, da es kein strenger Vergleich ist. –

+0

Ich dachte, dass es das Problem gelöst hat. –

+0

Und zwei Leute haben es abgelehnt. Ich verstehe nicht, wie Ihre Antwort das Problem auf jeden Fall behebt. Die von Ihnen vorgeschlagene bedingte Änderung macht keinen Unterschied in Bezug auf das Verhalten. Und der Fehlerunterdrückungsoperator würde das Problem nicht beheben. Wenn beim Senden der E-Mail ein Fehler auftritt und "Mail" dadurch fehlschlägt, würde das Unterdrücken des Fehlers die E-Mail nicht senden. –

Verwandte Themen