2016-08-23 9 views
0

Ich versuche, die gesammelten Werte eines HTML-Formulars als eine E-Mail an mich über PHP & Ajax zu senden. Aus irgendeinem Grund kann ich die Benutzeroberfläche mit einem Erfolgsalarm aktualisieren, es wird jedoch keine tatsächliche E-Mail gesendet, wenn ich meinen Posteingang überprüfe. Ich habe den Eindruck, dass mein PHP-Skript möglicherweise schlecht strukturiert ist, denn wenn ich die Ergebnisse meiner js-Funktion protokolliere, wurden alle Formularwerte korrekt erfasst. HierWie sollte ich dieses PHP-Mailing-Skript richtig strukturieren?

ist die JS:

function _(id){ return document.getElementById(id); }; 
function submitForm(){ 
    var formdata = new FormData(); 
    formdata.append("first-name", _("first-name").value); 
    formdata.append("last-name", _("last-name").value); 
    formdata.append("email", _("email").value); 
    formdata.append("subject", _("subject").value); 
    formdata.append("message", _("message").value); 
    var ajax = new XMLHttpRequest(); 
    ajax.open("POST", "email_me.php"); 
    ajax.onreadystatechange = function() { 
     if(ajax.readyState == 4 && ajax.status == 200) { 
      if(ajax.responseText == "success"){ 
       alert("Hey! It Worked!!"); 
      } else { 
      // display error 
      } 
     } 
    } 
    ajax.send(formdata); 
    // Display the key/value pairs 
    for (var pair of formdata.entries()) { 
     console.log(pair[0]+ ', ' + pair[1]); 
    } 
} 

Und hier ist das PHP-Skript (email_me.php Datei)

<?php 
    if(isset($_POST['first-name'], $_POST['last-name'], $_POST['email'], $_POST['subject'], $_POST['message'])){ 
    $name = $_POST['first-name']; 
    $email = $_POST['email']; 
    $m = nl2br($_POST['message']); 
    $to = "[email protected]"; 
    $from = $email; 
    $subject = $_POST['subject']; 
    $message = '<p>'.$m.'</p>'; 
    $headers = "From: $from\n"; 
    $headers .= "MIME-Version: 1.0\n"; 
    $headers .= "Content-type: text/html; charset=iso-8859-1\n"; 
    if(mail($to, $subject, $message, $headers)){ 
     echo "success"; 
    } else { 
     echo "The server failed to send the message. Please try again later."; 
    } 
    } 
?> 

Was ist scheint das Problem zu sein? Ich laufe die aktuelle Version von Apache mit einem localhost, mit MAMP Pro btw.

Hier sind die Server-Logs:

Marker - 23. August 2016, 12.34.32

23. August 12.35.24 MacBookAir postfix/master [7884]: dämon gestartet - version 2.11.0, konfiguration/etc/postfix Aug 23 12:36:24 MacBookAir postfix/master [7884]: master exit time ist angekommen

Aug 23 12:36:24 MacBookAir postfix/master [7885]: Daemon gestartet - Version 2.11.0, Konfiguration/etc/postfix Aug 23 12:37:24 MacBookAir Postfix/Master [7885]: Master-Ausfahrt Zeit ist angekommen Aug 23 12:37:24 MacBookAir r Postfix/Master [7886]: Daemon gestartet - Version 2.11.0, Konfiguration/etc/postfix

+2

Mögliche Duplikat [PHP Mail-Formular nicht vervollständigen das Versenden von E-Mail] arbeiten (http://stackoverflow.com/questions/ 24644436/php-mail-formular-doesnt-complete-sending-e-mail) –

+0

Das Problem tritt auf, wenn Sie eine E-Mail von der E-Mail des Benutzers senden, eine E-Mail von einer konstanten E-Mail senden und die E-Mail des Benutzers in einer Nachricht behalten. $ header = "Von: [email protected] \ r \ n"; –

+0

können Sie möglicherweise meinen Code bearbeiten, um ein Beispiel dafür zu zeigen? @ Kool-Mind –

Antwort

0

Update Sie PHP-Code und überprüfen Sie es

if(isset($_POST['first-name'], $_POST['last-name'], $_POST['email'], $_POST['subject'], $_POST['message'])){ 
    $name = $_POST['first-name']; 
    $email = $_POST['email']; 
    $m = nl2br($_POST['message']); 
    $message = '<p>Name => '.$name.' <br/> Email =>'.$email.'<br /> Message =>'.$m.'</p>'; 
    $to = "[email protected]"; 

    $subject = $_POST['subject']; 
    $headers = "From: [email protected]\r\n"; // use \r\n 
    $headers .= "MIME-Version: 1.0\r\n"; 
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; // use \r\n 
    $headers.= "X-Priority: 1\r\n"; 
    if(mail($to, $subject, $message, $headers)){ 
     echo "success"; 
    } else { 
     echo "The server failed to send the message. Please try again later."; 
    } 
    } 
+0

Kein Glück, ich bekomme eine Menge "Operation abgelaufen" Fehler in meiner E-Mail .log meines Servers –

+0

Was ist das für ein Fehler? und bitte update $ headers. = "X-Priorität: 1 \ r \ n"; Es war $ Header vorher –

+0

'Aug 23 03:43:55 MacBookAir postfix/smtp [6896]: Verbindung zu mta5.am0.yahoodns.net [66.196.118.35]: 25: Betrieb timed out Aug 23 03:43:55 MacBookAir postfix/smtp [6896]: Warnung: 0C36E1E3DBA9: Service-Fehler zurückstellen ' Aug 23 03:43:55 MacBookAir Postfix/smtp [6896]: 0C36E1E3DBA9: zu = <[email protected]>, Relais = keine, Verzögerung = 38342, Verzögerungen = 38192/0.05/150/0, dsn = 4.4.1, Status = zurückgestellt (Verbindung zu mta5.am0.yahoodns.net [66.196.118.35]: 25: Zeitüberschreitung der Operation) –

Verwandte Themen