Lösung: WordPress schreibt keine E-Mails
Eingestellt von Martin am Donnerstag Jun 25, 2009 in der Kategorie Frisch aus der CodekücheIn den Optionen von WordPress kann eingestellt werden, dass bei neuen Kommentaren an den Seitenbetreiber eine E-Mail gesendet wird. Dies ist besonders sinnvoll, wenn Kommentare zunächst von einem Redakteur geprüft werden müssen, bevor sie veröffentlicht werden. Allerdings kommen diese E-Mails manchmal nicht an. Hier zwei Lösungswege, um den Versand von E-Mails durch WordPress zu ermöglichen:
Das Problem lag bei den 4 von mir betreuten Seiten jeweils an einer (in meinen Augen) unsinnigen Einstellung von WordPress:
Die Funktion, welche E-Mails versendet, trägt als Absender standardmäßig “wordpress@domain.tld” ein. Hierbei entspricht “domain” der Domain der jeweiligen Seite – in meinem Fall wäre der Absender als0: “wordpress@deviala.de”. Diese Adresse wird wohl bei den wenigsten E-Mailservern existieren. Die meisten Webhoster haben nun aber ihren E-Mailserver so eingestellt, dass dieser keine E-Mails mit unbekanntem Absender zulässt.
Um das Problem zu umgehen bieten sich drei Lösungen an:
Die einfache Lösung
Wer für seinen Webspace beliebige E-Mailadressen anlegen kann, kann einfach die Adresse “wordpress@domain.tld” anlegen. Damit sollte das Problem behoben sein
Die aufwändige Lösung
Hierbei muss man FTP-Zugriff auf den Webspace haben. Weiterhin MUSS mindestens eine gültige E-Mailadresse auf dem Server existieren.
Es müssen zwei Dateien angepasst werden:
- /wp-config.php
- /wp-includes/pluggable.php
Hier nun die Änderungen:
wp-config.php
Hier muss die folgende Zeile hinzugefügt werden:
1 2 | //Mail-Hack
define ('STD_MAIL', 'info@example.com'); |
Die Datei wp-config.php wird jedesmal, wenn ein Stückchen Code von WordPress ausgeführt wird auch ausgeführt. Die Zeile bewirkt, dass die angegebene E-Mailadresse innerhalb von WordPress in der Variablen $STD_MAIL verfügbar ist.
Nun muss die Methode, welche für den Mailversand zuständig ist angepasst werden, damit diese Adresse genutzt wird.
wp-includes/pluggable.php
In dieser Datei müssen zwei Zeilen geändert werden. Die angegebenen Zeilennummern entsprechen denen der Version 2.8:
369 | $from_email = 'wordpress@' . $sitename; |
ändern in
369 | $from_email = $STD_MAIL; |
und
1018 | $wp_email = 'wordpress@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])); |
ändern in
1018 | $wp_email = $STD_MAIL; |
Die Alternative?!
Die Änderungen im vorigen Abschnitt, könnten ggf. auch durch ein PlugIn realisiert werden. Allerdings habe ich bisher keines gefunden, welches diese Funktionalität hat – und die Zeit eines zu schreiben habe ich gerade nicht. Eventuell werde ich das später in Angriff nehmen – die Änderungen der vorigen Lösung an der Datei pluggable.php müssen nämlich manuell für jedes Update von WordPress wiederholt werden.

August 4th, 2009 at 2:20 pm
Hallo Martin,
erstmal DANKE für die Anleitung. Funktioniert soweit, aber
Jetzt kommen meine Emails ohne Absender Adresse an. Ist natürlich doof, weil die meisten im Spamfilter landen, wenn sie überhaupt ankommen.
Hast du da ne Lösung oder hab ich vielleicht was falsch gemacht ?
Gruß
Marcel
August 13th, 2009 at 11:15 pm
Also ich nutze auf diesem Server Methode 1 – das ist am einfachsten
Auf einer anderen, von mir verwalteten Seite musste ich zu Trick 2 greifen. Bei mir gab es dort aber bisher keine solchen Probleme?!
Meine wp-config sieht dort etwa so aus:
<?php // ** MySQL settings ** // define('DB_NAME', 'xxx'); // The name of the database define('DB_USER', 'xxx'); // Your MySQL username define('DB_PASSWORD', 'xxx'); // ...and password define('DB_HOST', 'xxx'); // 99% chance you won't need to change this value define('DB_CHARSET', 'utf8'); define('DB_COLLATE', ''); // Change each KEY to a different unique phrase. You won't have to remember the phrases later, // so make them long and complicated. You can visit http://api.wordpress.org/secret-key/1.1/ // to get keys generated for you, or just make something up. Each key should have a different phrase. define('AUTH_KEY', 'xxx'); define('SECURE_AUTH_KEY', 'xxx'); define('LOGGED_IN_KEY', 'xxx'); define('NONCE_KEY', 'xxx'); // You can have multiple installations in one database if you give each a unique prefix $table_prefix = 'xxx_wp_'; // Only numbers, letters, and underscores please! // Change this to localize WordPress. A corresponding MO file for the // chosen language must be installed to wp-content/languages. // For example, install de.mo to wp-content/languages and set WPLANG to 'de' // to enable German language support. define ('WPLANG', 'de_DE'); //email define ('STD_MAIL', 'info@example.com'); /* That's all, stop editing! Happy blogging. */ if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); require_once(ABSPATH . 'wp-settings.php'); ?>