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:
- In
php.ini
sendmail_path
auskommentieren
- 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.