569 Stimmen

Die PHP-Mail-Funktion sendet die E-Mail nicht vollständig.

Ihre Nachricht wurde gesendet!';
        } else {
            echo 'Etwas ist schief gelaufen, gehen Sie zurück und versuchen Sie es erneut!';
        }
    }
?>

Ich habe versucht, ein einfaches Mail-Formular zu erstellen. Das Formular selbst befindet sich auf meiner index.html-Seite, aber es wird an eine separate "Vielen Dank für Ihre Einsendung"-Seite, thankyou.php, gesendet, wo der obige PHP-Code eingebettet ist. Der Code wird einwandfrei übermittelt, sendet aber keine E-Mail. Wie kann ich das beheben?

2voto

L3xpert Punkte 649

Sie können PHPMailer verwenden und es funktioniert perfekt, hier ist ein Codebeispiel:

IsSMTP();
        $mail->Mailer = "smtp";
        $mail->SMTPDebug  = 1;
        $mail->SMTPAuth   = TRUE;
        $mail->SMTPSecure = "tls";
        $mail->Port       = 587;
        $mail->Host       = "smtp.gmail.com";//using smtp server
        $mail->Username   = "XXXXXXXXXX@gmail.com";//the email which will send the email 
        $mail->Password   = "XXXXXXXXXX";//the password

        $mail->IsHTML(true);
        $mail->AddAddress($to, "empfänger-name");
        $mail->SetFrom("XXXXXXXXXX@gmail.com", "absender-name");
        $mail->AddReplyTo("XXXXXXXXXX@gmail.com", "antwort-name");
        $mail->Subject = $subject;
        $mail->MsgHTML($editor);

        if (!$mail->Send()) {
            echo "Fehler beim Senden der E-Mail.";
            var_dump($mail);
        } else {
            echo "E-Mail erfolgreich gesendet";
        }
    }
} catch (Exception $e) {
    echo $e->getMessage();
}

0voto

krishna Punkte 147

Sie können Ihre Fehler sehen, indem Sie:

error_reporting(E_ALL);

Und mein Beispielscode ist:

IsSMTP();
    $mail->SMTPDebug = 0;                   // Legt Mailer auf SMTP fest
    $mail->Host = 'smtp.gmail.com';         // Geben Sie den Haupt- und Backup-Server an
    $mail->Port = 587;                      // Setzt den SMTP-Port
    $mail->SMTPAuth = true;                 // Aktiviert SMTP-Authentifizierung
    $mail->Username = 'someone@gmail.com';  // SMTP-Benutzername
    $mail->Password = 'password';           // SMTP-Passwort
    $mail->SMTPSecure = 'tls';              // Verschlüsselung aktivieren, 'ssl' ebenfalls akzeptiert

    $mail->From = 'someone@gmail.com';
    $mail->FromName = 'name';
    $mail->AddAddress($mailid, $name);       // Name ist optional
    $mail->IsHTML(true);                     // Setzt E-Mail-Format auf HTML
    $mail->Subject = 'Hier ist der Betreff';
    $mail->Body    = 'Dies ist Ihre Nachricht' ;
    $mail->AltBody = 'Dies ist der Textkörper für Nicht-HTML-E-Mail-Clients';
    if (!$mail->Send()) {
       echo 'Nachricht konnte nicht gesendet werden.';
       echo 'Fehler des Mailers: ' . $mail->ErrorInfo;
       exit;
    }
    echo 'Nachricht wurde gesendet';
?>

0voto

ofri cofri Punkte 686

Wenn Sie mit einer App, die bei Hostgator gehostet wird, stecken bleiben, hat dies mein Problem gelöst. Vielen Dank an den Typen, der die ausführliche Lösung gepostet hat. Falls der Link eines Tages offline geht, hier ist die Zusammenfassung:

  • Suchen Sie nach dem Sendmail-Pfad auf Ihrem Server. Eine einfache Möglichkeit, dies zu überprüfen, besteht darin, vorübergehend den folgenden Code auf einer Seite zu schreiben, die nur Sie erreichen können, um die generierten Informationen zu lesen: . Öffnen Sie diese Seite und suchen Sie nach sendmail-Pfad. (Vergessen Sie dann nicht, diesen Code zu entfernen!)
  • Problem und Lösung: Wenn Ihr Sendmail-Pfad nur -t -i angibt, bearbeiten Sie die php.ini Ihres Servers und fügen Sie folgende Zeile hinzu: sendmail_path = /usr/sbin/sendmail -t -i;

Aber nachdem ich in der Lage war, E-Mails mit der PHP mail()-Funktion zu senden, habe ich gelernt, dass diese unauthentifizierte E-Mails sendet, was ein weiteres Problem verursacht hat. Die E-Mails sind alle im Junk-E-Mail-Ordner meines Hotmail gelandet, und einige E-Mails wurden nie zugestellt, was wahrscheinlich damit zusammenhängt, dass sie nicht authentifiziert sind. Deshalb habe ich mich letztendlich dazu entschlossen, von mail() auf PHPMailer mit SMTP umzusteigen.

0voto

Mahvash Fatima Punkte 81
Titel hier

Nachricht hier

';

// Zeilenumbruchtyp (RFC).
$eol = "\r\n";

$headers  = "Reply-To: Name ".$eol;
$headers .= "Return-Path: Name ".$eol;
$headers .= "From: Name ".$eol;
$headers .= "Organization: Hostinger".$eol;
$headers .= "MIME-Version: 1.0".$eol;
$headers .= "Content-type: text/html; charset=iso-8859-1".$eol;
$headers .= "X-Priority: 3".$eol;
$headers .= "X-Mailer: PHP".phpversion().$eol;

mail($to, $subject, $message, $headers);

Senden von HTML-E-Mails Beim Senden einer E-Mail-Nachricht können Sie eine Mime-Version, einen Inhaltstyp und einen Zeichensatz angeben, um eine HTML-E-Mail zu senden.

Beispiel Im obigen Beispiel wird eine HTML-E-Mail-Nachricht an name@example.com gesendet. Sie können dieses Programm so codieren, dass es alle Inhalte vom Benutzer empfängt und dann eine E-Mail sendet.

0voto

MarkW Punkte 144

Ich hatte dieses Problem und fand heraus, dass es mir geholfen hat, die Header zu reduzieren, um E-Mails zu versenden. Also das:

$headers = "From: ".__SITE_TITLE."\r\n";
$headers .= "Reply-To: ".$sender."\r\n";

wurde zu:

$headers = "From: ".__SITE_TITLE."\r\n";
$headers .= "Reply-To: ".$sender."\r\n";

Keine Notwendigkeit für den To-Header.

E-Mail-Clients sind ziemlich gut darin, URLs auszuspüren und sie als Hyperlink umzuschreiben. Also habe ich mir nicht die Mühe gemacht, HTML zu schreiben und text/html im Content-Type-Header anzugeben. Ich habe einfach neue Zeilen mit \r\n im Nachrichtenrumpf hinzugefügt. Ich weiß, dass dies nicht der Ansatz eines reinen Programmierers ist, aber es funktioniert für das, was ich brauche.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X