Lösung: WordPress schreibt keine E-Mails

Eingestellt von Martin am Donnerstag Jun 25, 2009 in der Kategorie Frisch aus der Codeküche

In 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.

2 Antworten to “Lösung: WordPress schreibt keine E-Mails”

  1. Marcel Meint:

    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

  2. Administrator Meint:

    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');
    ?>
    

Hinterlasse einen Kommentar