Ich habe kürzlich einen Kommentarbereich auf meiner Website implementiert und versucht, die E-Mail-Benachrichtigung zum Laufen zu bringen. Es scheint keine E-Mail-Benachrichtigungen senden zu wollen, wenn neue Kommentare abgegeben werden.
Um zu sehen, ob PHP E-Mails senden kann, habe ich versucht, das Passwort zurückzusetzen (da Sie ein neues Passwort per E-Mail erhalten), und ich habe die folgende Nachricht erhalten:
Die E-Mail konnte nicht gesendet werden. Möglicher Grund: Ihr Host hat möglicherweise die Funktion mail () deaktiviert
Ich habe die Kontrollkästchen unter "Einstellungen" -> "Diskussion" aktiviert und die E-Mail ist gültig, sodass es sich nicht um ein Einstellungsproblem handelt. Ich habe versucht, eine PHP-Datei zu erstellen und mit zu senden mail()
, und es wurde erfolgreich gesendet. Es muss also etwas Seltsames mit WordPress los sein.
Irgendwelche Ideen?
Antworten:
Schritt für Schritt: Suchen Sie zuerst die Datei, in der die Fehlermeldung angezeigt wird. Ich benutze Notepad ++ und den Befehl CTRL+ F, um in Dateien zu suchen. Es ist eine gute Idee, nur die ersten paar Wörter der Fehlermeldung zu durchsuchen, da einige Fehlermeldungen aus verschiedenen Meldungen kombiniert werden.
Ihre Fehlermeldung erscheint in
wp-login.php
und heiliges Glück, nur dort. Schauen wir uns also an, warum dieser Fehler auftreten kann.Es gibt zwei Bedingungen.
$message
müssen wahr sein (keine leere Zeichenfolge, nicht falsch, nicht null usw.). Undwp_mail()
sollte nicht falsch zurückgeben.In einer Zeile darüber befindet sich ein Filter
$message = apply_filters('retrieve_password_message', $message, $key);
. Daher ist es möglich, dass ein Plugin (oder Theme) diesen Filter verwendet und einen Wert zurückgibt, der nicht wahr ist (leere Zeichenfolge, falsch, null usw.).Es ist jedoch viel einfacher zu überprüfen, ob
wp_mail()
es funktioniert oder nicht. Schreiben Sie ein kleines Plugin, um eine Testmail an sich selbst zu senden:(Dies ist PHP5.3-Code. Wenn Sie PHP5.2 ausführen, entfernen Sie die Namespace-Elemente.)
Das Plugin sollte sofort nach der Aktivierung eine Testmail senden. Wenn nicht, sollten einige Backend-Seiten (z. B. Dashboard) aufgerufen werden.
Wenn die Testmail nicht ankommt, haben Sie wahrscheinlich ein Problem mit
wp_mail()
. Aktivieren Sie also das Debuggen:wp-config.php
Geben Sie diesen Code in Ihre ein und versuchen Sie erneut, sich eine Testmail zu senden. Jetzt sollten Sie einige Fehlermeldungen erhalten und diese sollten auch angemeldet seinwp-content/debug.log
(Das Debug-Protokoll kann sehr groß werden, wenn mehr Fehler durch Plugins und / oder Themes verursacht werden).Zu diesem Zeitpunkt haben Sie gute Informationen erhalten, wenn dies
wp_mail()
fehlschlägt und wenn ja, warum. Wenn eswp_mail()
richtig funktioniert und die Testmail eingetroffen ist, gehen Sie zurück nach oben und finden Sie heraus, warum dies$message
nicht der Fall ist.Wenn Sie Probleme mit haben
wp_mail()
, denken Sie daran, dasswp_mail()
die PHP-mail()
Funktion nicht verwendet wird . WordPress verwendet eine PHP-Klasse ( PHPMailer ). Möglicherweise benötigen Sie nur ein Plugin, um SMTP anstelle von sendmail zu verwenden. Oder das Problem liegt an einem anderen Ort. Wir wissen es nicht. Du musst nachforschen.quelle
mail()
. Zumindest in einigen Fällen (siehe Zeile 732 inwp-includes/class-phpmailer.php
. Ich habe keinen Zugriff auf die FTP-Atm, aber ich werde Ihre Vorschläge so schnell wie möglich versuchen. Dies muss mich sicherlich irgendwohin führen. Vielen Dank!wp_mail()
und es scheint gut zu funktionieren, ich habe die Mail wie erwartet erhalten. WP würde die E-Mails zum Zurücksetzen von Kommentaren / Passwörtern immer noch nicht senden, und ich habe nichts in der Protokolldatei erhalten (sie wurde nicht erstellt), also habe ich versucht, ein SMTP-Mail-Plugin zu installieren und ein neues E-Mail-Konto für einzurichten Wordpress. Es funktioniert jetzt, aber ich verstehe immer noch nicht, warum es vorher nicht senden konnte. Vielen Dank!Dies ist eine sehr ärgerliche Fehlermeldung, da es sich um viele Dinge handeln kann und der tatsächliche Fehler nicht angezeigt wird (der in anderen Teilen des Codes häufig zum Schweigen gebracht wird).
Dieser Fehler tritt auf, wenn die
wp_mail()
Funktion false zurückgibt. Dies kann wiederum passieren, wennphpmailer->Send()
false zurückgegeben wird oder eine Ausnahme ausgelöst wird.So zeigen Sie Warnungen aus der PHP-
mail()
Funktion anDiese werden normalerweise standardmäßig stummgeschaltet, aber WordPress erfasst sie leider nie. Um zu zeigen , sie einfach die entfernen
@
Zeichen von@mail(...
inwp-includes/class-phpmailer.php
dermailPassthru()
Funktion:So suchen Sie nach anderen möglichen Ursachen:
Fügen Sie eine einzelne Zeile am Ende von
wp_mail()
in hinzu/wp-includes/pluggable.php
:Es werden alle Details darüber ausgegeben, wo die Ausnahme ausgelöst wurde. Leider enthält es manchmal die nicht hilfreiche Ausnahmemeldung: " Mail-Funktion konnte nicht instanziiert werden ". Ja danke WordPress, das ist wirklich hilfreich.
Wenn Sie sich die Ausnahme ansehen, können Sie die Zeilennummer des Fehlers finden und sie hoffentlich durch den Code zurückverfolgen, um die wahre Ursache zu finden.
Viel Glück. Hoffentlich verbessert WordPress irgendwann in der Zukunft die Behandlung von E-Mail-Fehlern.
quelle
Ich habe das gleiche Problem mit dem Ubuntu-Server unter Amazon EC2. Ich bekomme ein Problem, wenn ich den Link zum Zurücksetzen des Passworts verwende und auch andere Benachrichtigungs-E-Mails nicht funktionieren.
Hier sind also Lösungen, die für mich
wp_mail()
funktioniert haben. Word-Press verwendet die Funktion zum Senden von E-Mails, die einePHPMailer
Klasse benötigen , in der PHP-Mailer gespeichert sind/usr/sbin/sendmail
.Verwenden Sie diese einfache PHP-Funktion zuerst, um PHP-Mails zu überprüfen
Wenn dies nicht funktioniert, müssen Sie PHP Mailer installieren. Verwenden Sie diesen Befehl, um PHP-Mail auf dem Ubuntu-Server zu installieren.
Überprüfen Sie dann die E-Mail-Funktionen für WordPress.
quelle
Wenn die anderen tollen Antworten hier nicht helfen, versuchen Sie Folgendes:
Ich bin auf dasselbe Problem gestoßen und nichts, was ich in einem der Vorschläge für WordPress finden konnte, hat es für mich gelöst.
Dann begann ich zu untersuchen, ob es die PHP-Installation selbst war, die die Mail-Funktion deaktiviert hatte, aber auch nichts davon funktionierte. Alles sah so aus, als wäre es richtig konfiguriert.
All diese Probleme begannen für mich, als ich meinen Server auf CentOS 7 aktualisierte, das SELinux (Security Enhanced Linux) verwendet. In den letzten Wochen habe ich mit SELinux gelernt, dass etwas nicht funktioniert, aber alles so aussieht es sollte funktionieren ... das heißt, SELinux blockiert Sie still und heimlich im Hintergrund.
Und Bratsche.
Wenn Sie ein Betriebssystem verwenden, das SELinux verwendet, führen Sie einfach den folgenden Befehl als root aus:
setsebool -P httpd_can_sendmail=1
Es gibt eine Sicherheitseinstellung, die den Webserver von Natur aus daran hindert, E-Mails zu senden. Wenn Sie diesen Schalter umlegen und SELinux mitteilen, dass der Webserver E-Mails senden kann, funktioniert plötzlich alles.
quelle
Ich bin heute darauf gestoßen; In meinem Fall ist die Situation aufgetreten, weil die Hosts-Datei des Servers denselben Domainnamen wie die E-Mail-Adresse hat und auf localhost verweist. Der mx-Eintrag verweist auf einen anderen Server, aber die Hosts-Datei überschreibt DNS und WP versucht, die E-Mail lokal zuzustellen. Durch Entfernen der Domäne aus der Hosts-Datei und Neustarten von sendmail wurde dieses Problem behoben.
quelle
Ich weiß nicht, ob dies für Sie noch relevant ist oder nicht, aber da keine Antwort ausgewählt wurde, dachte ich, ich sollte es einmal versuchen.
Eigentlich hatte ich genau das gleiche Problem, seit mein OpenShift-Host heute plötzlich nachgab und keine E-Mails mehr verschickte. Beim Durchstöbern des Codes und des Codex lernte ich die Funktion wp_mail () kennen und schließlich führte mich Google hierher und ich sah, wie sie überschrieben werden konnte.
Aufbauend auf der Antwort von @ Ralf912 habe ich das Skript ein wenig geändert, sodass der Code die Web-API von sendgrid.com verwendet, um E-Mails anstelle der WordPress-Standard-API zu senden (ich nehme an:
Und es hat funktioniert!
quelle
Ich hatte den gleichen Fehler, beide Funktionen (mail und wp_mail) funktionierten, aber ich hatte immer noch diesen nervigen Fehler. Die Lösung war sehr einfach, aber ich habe einige Stunden gebraucht, um den Grund zu finden. Deshalb werde ich hier meine Lösung für das Problem mitteilen, das mit Ihrem Problem identisch sein könnte (oder auch nicht).
Ich habe die Funktion mail () ausprobiert und sie hat funktioniert, aber wenn Sie sie testen, geben Sie in der Funktion mail () nicht den letzten Parameter mit dem Namen 'parameters' an. Und WP benutzt es.
Grundsätzlich bewirkt dieser Parameter ("[email protected]") mit dem Flag "-f", dass die Funktion mail () überprüft, ob die E-Mail-Adresse "[email protected]" in der Liste "Vertrauenswürdige E-Mails" aufgeführt ist.
Wenn dies nicht der Fall ist, wird false zurückgegeben, wodurch wp_mail () false zurückgibt und zur Fehlermeldung führt.
Die Lösung besteht darin, den Hoster zu bitten, dies für Sie zu tun. Wenn Sie cPanel verwenden, fügen Sie einfach ein E-Mail-Konto für diese Adresse hinzu und es wird automatisch in die "vertrauenswürdige Liste" aufgenommen.
quelle
es heißt -Manage Registered Email-Ids für das Senden von Mails über Skripte, dh (Wordpress)
quelle
Ich hatte diesen Fehler seit Ewigkeiten und habe so viele Lösungen ausprobiert, die nicht funktionierten. Ich habe eine benutzerdefinierte Wordpress-Installation auf AWS EC2. Stellen Sie zunächst sicher, dass Ihre AWS SES-E-Mails durch Support aktiviert sind. Sie müssen sich in SES und EC2 in derselben (oder einer geschlossenen) Region befinden. Ich habe Google Suite (gsuite) für E-Mails zum Empfangen / Senden von E-Mails verwendet.
Stellen Sie sicher, dass die Test-E-Mail in AWS SES und Gsuite gesendet wird.
Installieren Sie das Wordpress-Plugin WP Mail SMTP, verwenden Sie die Option "Anderes SMTP", holen Sie sich Ihre SMTP-Anmeldeinformationen von AWS SES, hier steckte ich fest.
Sie müssen das Kontrollkästchen "SSL" für die Verschlüsselung aktivieren. Dadurch wird der Port für mich auf 465 geändert. Endlich wurde mein E-Mail-Test von Worpdress erfolgreich gesendet.
quelle