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?

0voto

In meinem Fall wurde die E-Mail zwar gut gesendet, aber nicht empfangen, weil die gesamte Nachricht in einer Zeile von über 998 Zeichen stand. Ich musste die Zeilen auf eine maximale Länge von 70 mit der folgenden Zeile machen: wordwrap($email_message, 70, "\r\n");.

https://www.rfc-editor.org/rfc/rfc5322#section-2.1.1

Es gibt zwei Grenzen, die diese Spezifikation für die Anzahl der Zeichen in einer Zeile festlegt. Jede Zeile von Zeichen DARF nicht mehr als 998 Zeichen haben und SOLLTE nicht mehr als 78 Zeichen haben, ohne die CRLF.

0voto

Cloudranger Punkte 1379

Es gibt viele Möglichkeiten, wie mail() fehlschlagen kann, aber in meinem Fall war es so:

Ich habe sendmail auf meinem Server installiert, aber es ist kein lokaler MTA konfiguriert oder aktiviert - wenn ich sendmail in der Befehlszeile eingebe, erhalte ich den Fehler "sendmail: can't connect to remote host (127.0.0.1): Connection refused"

Wenn Sie etwas ähnliches bekommen, haben Sie wahrscheinlich keinen MTA installiert/konfiguriert und die folgenden Details könnten Ihnen helfen:

Wenn Sie den oben genannten Fehler erhalten, könnten Sie einen lokalen MTA installieren und dann sollte es funktionieren, aber in meinem Fall möchte ich keinen lokalen MTA ausführen, weil ich Mail an einen anderen Mail-Server (authentifiziert) weiterleiten möchte, und zwar mit msmtp.

mail() gab FALSE zurück, aber ohne Fehlermeldung, und es gab keine Fehler in meiner php.log oder in einem anderen Log, es ist einfach still fehlgeschlagen.

Ich hatte meine php.ini mit dem folgenden konfiguriert, um die Verwendung von sendmail außer Kraft zu setzen und stattdessen msmtp zu verwenden (das sendmail-kompatible Parameter verwendet):

sendmail_path = /usr/bin/msmtp  

Das Ändern dieses Parameters hat jedoch nicht dazu geführt, dass mail() funktioniert, obwohl ich msmtp manuell ausführen kann und E-Mails senden kann.

Es scheint mir, als würde PHP mail() sendmail_path ignorieren, wenn Sie es auf etwas anderes ändern, und es führt weiterhin sendmail aus.

Der einzige Weg, wie ich mail() zum Laufen bringen konnte, ohne sendmail und ohne einen lokalen MTA installiert zu haben, war:

  1. In php.ini sendmail_path auskommentieren
  2. Erstellen Sie einen symbolischen Link zu msmtp wie folgt: ln /usr/bin/msmtp /usr/sbin/sendmail

Sobald ich dies getan hatte, begann mail() sofort zu funktionieren.

Ich kann es noch nicht beweisen, aber mein Bauchgefühl sagt mir, dass es einen Bug in PHP im Zusammenhang mit sendmail_path gibt und es im Grunde ignoriert und trotzdem sendmail ausführt.

-1voto

SuReSh Punkte 1427

Es gibt mehrere Möglichkeiten:

  1. Sie haben ein Serverproblem. Der Server hat keinen Mailserver. Daher funktioniert Ihre E-Mail nicht, weil Ihr Code in Ordnung ist und die E-Mail mit Typ funktioniert.

  2. Sie erhalten nicht den übermittelten Wert. Versuchen Sie es mit einem statischen Wert in Ihrem Code.

  3. Verwenden Sie SMTP-Mails, um E-Mails zu senden...

-1voto

user109764 Punkte 488

Es könnte ein Problem mit der "From:" $E-Mail-Adresse in diesem Teil der $Header sein:

From: \"$name\" <$email>

Um es auszuprobieren, senden Sie eine E-Mail ohne den Header-Teil, wie z.B.:

mail('user@example.com', $Betreff, $Nachricht); 

Wenn das der Fall ist, versuchen Sie, ein E-Mail-Konto zu verwenden, das bereits im System erstellt wurde, von dem aus Sie die E-Mail senden möchten.

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