Passwort-Reset-Mails verschwinden einfach. WordPress sagt, ich soll in meinen Posteingang schauen, und es kommt nichts an, nicht mal im Spam-Ordner.
wp_mail() liefert true, sobald PHPMailer die Nachricht an PHP mail() übergeben hat und der lokale MTA sie annimmt. Hat dieser MTA keinen Weg nach draußen, oder verwirft die Gegenseite die Post, weil sie unsigniert ist und ihr Envelope zu einem geteilten Server gehört, protokolliert nichts in WordPress diesen Verlust. Die Action wp_mail_failed feuert nur, wenn PHPMailer eine Exception wirft.
Die Lösung
Installiere FluentSMTP oder WP Mail SMTP, verbinde einen Anbieter und sieh im Protokoll des Plugins nach genau diesem Versand. Zeigt das Protokoll eine Zustellung und im Postfach liegt trotzdem nichts, sitzt das Problem beim Empfänger: Schick dann einen echten Versand an eine Test-Adresse von Unspam und lies die Authentifizierungsergebnisse.
Unsere WooCommerce-Bestellbestätigungen landen bei Gmail-Kunden im Spam, in unserem eigenen Outlook-Posteingang kommen sie tadellos an.
Dein eigener Mailserver setzt deine Domain oder deinen Server meist auf eine Allowlist, interne Tests sagen dir also nichts. Gmail wendet seine Absenderrichtlinien an: mindestens SPF oder DKIM, gültige Forward- und Reverse-DNS-Einträge auf der Versand-IP, TLS auf dem Transportweg. PHP mail() aus dem Shared Hosting scheitert an der ersten Anforderung, oft auch an der zweiten, und lässt dich bei beiden im Dunkeln.
Die Lösung
Leite WooCommerce-Post über einen Anbieter, setz die From-Adresse unter WooCommerce > Settings > Emails auf ein Postfach auf deiner eigenen Domain und prüfe an einer echten Bestellung, dass DKIM mit deiner Domain signiert. Teste die Zustellbarkeit nie, indem du an ein Postfach auf derselben Infrastruktur schickst, von der du auch versendest.
Ich habe WP Mail SMTP installiert, die Test-E-Mail meldet Erfolg, und echte Formular-Benachrichtigungen landen trotzdem im Spam.
Das Werkzeug Email Test verschickt seine eigene Nachricht mit der From Email des Plugins. Dein Formular-Plugin setzt in den Einstellungen der Benachrichtigung seine eigene From-Adresse, solange also das Häkchen bei Force From Email fehlt, geht die echte Benachrichtigung unter einem anderen Absender raus, womöglich unter einem, den der Anbieter nicht verifiziert hat und den deine DNS-Einträge nicht abdecken. Dieselbe Website, zwei verschiedene Versandidentitäten.
Die Lösung
Setz das Häkchen bei Force From Email unter WP Mail SMTP > Settings, oder trag in der Formular-Benachrichtigung dieselbe verifizierte Adresse als From Email ein, und verschieb die Adresse des Besuchers per Smart Tag ins Reply-To. Schick dann das Formular wirklich ab, mit einer Test-Adresse von Unspam und der Test-ID im Nachrichtenfeld.
Contact Form 7 lief jahrelang, dann fing Gmail an, alles mit dem Fehler 5.7.26 zu bouncen.
Das Formular setzt die Adresse des Besuchers in den From-Header, dein Server verschickt also Post, die vorgibt, von gmail.com zu kommen. Googles Absenderanforderungen wurden im Februar 2024 verschärft, und nicht authentifizierte Post kann seitdem als Spam markiert oder direkt mit 5.7.26 abgewiesen werden. An deiner Website hat sich nichts geändert, die Latte liegt höher.
Die Lösung
Nimm eine Adresse auf deiner eigenen Domain als From und die Adresse der absendenden Person als Reply-To, genau so dokumentieren es WPForms und WooCommerce. Authentifiziere diese Domain danach sauber über einen SMTP-Anbieter, damit das From, das du jetzt nutzt, das SPF- oder DKIM-Alignment auch wirklich besteht.
Website auf einen neuen Hoster umgezogen, und die Post steht komplett. Nichts in den Logs, nichts im Plugin.
Welche ausgehenden Ports offen sind, entscheidet jede Plattform für sich, und diese Regeln ziehen mit deinen Dateien nicht um. Kinsta sperrt ausgehenden Port 25 und bietet 587, 465 und 2525. WP Engine lässt Port 25 nicht zu, erlaubt 587 und 465 und empfiehlt 2525. DigitalOcean sperrt auf Droplets standardmäßig 25, 465 und 587, auch für Verkehr über eine Reserved IP, und AWS drosselt Port 25 von EC2 aus standardmäßig. Ein gesperrter Port zeigt sich als Zeitüberschreitung der Verbindung, nicht als Problem der Zustellbarkeit.
Die Lösung
Lass dir vom Hoster schriftlich geben, welche ausgehenden Ports in deinem Tarif offen sind, stell im Plugin das passende Paar aus Port und Verschlüsselung ein (TLS mit 587 oder SSL mit 465), und wenn alles gesperrt ist, wechsle auf einen Mailer, der den Anbieter über HTTPS statt über SMTP erreicht.