toscho.design

WordPress: Gültige Adresse für System-E-Mails erzwingen

Wenn man mit WordPress eine E-Mail verschickt, dann sollte man unbedingt wp_mail() benutzen – und einen kompletten Absender angeben. Vergisst man den Absender, so denkt sich WordPress selbst eine Adresse aus, die nicht sehr gut funktioniert.

  • Der Name ist WordPress.
  • Die E-Mail-Adresse ist wordpress@ + aktuelle Domain um ein führendes www. gekürzt.

Probleme:

  • Der Name ist wenig hilfreich, wenn man mehr als eine Installation verwaltet.
  • Von Domains wie www.com oder www.eu bekommt man eine Absende-Adresse, die WordPress selbst als ungültig zurückgewiesen hätte.
  • wordpress@example.com kennt der Mailserver wahrscheinlich nicht. Wenn man keine Catch-All-Adresse eingerichtet hat, kann der Empfänger einem keine Antwort senden.

Glücklicherweise gibt es zwei Filter, mit denen wir das reparieren können.

GitHub: https://gist.github.com/3520629

if ( ! function_exists( 't5_filter_system_from_mail' ) )
{
    /**
     * First admin's e-mail address or blog name depending on current filter.
     *
     * See wp-includes/pluggable.php::wp_mail()
     *
     * @param  $input Name or email address
     * @return string
     */
    function t5_filter_system_from_mail( $input )
    {
        if ( 0 !== stripos( $input, 'wordpress' ) )
        {
            return $input; // Not auto-generated
        }

        return get_option( 'wp_mail_from' == current_filter()
            ? 'admin_email' : 'blogname' );
    }

    add_filter( 'wp_mail_from',      't5_filter_system_from_mail' );
    add_filter( 'wp_mail_from_name', 't5_filter_system_from_mail' );
}

Dieses Plugin ersetzt die automatisch erzeugte Adresse mit der des ersten Administrators. Man sollte freilich testen, ob der Mailserver diese auch als Absender akzeptiert. Genau deshalb erzeugt WordPress schließlich eine lokale Adresse: Andere funktionieren oft auch nicht.