WordPress – Mail-Header Return-Path und X-Mailer mit Hook modifizieren

Die Mail-Funktion in WordPress hat zwei Nachteile. Zum einen weicht in bestimmten Fällen der Return-Path-Header vom From-Header ab, was zur empfängerseitigen Einordnung der versendeten E-Mails als Spam führen kann (siehe Fixing the WordPress Email Return-Path Header). Zum anderen gibt der per Voreinstellung mitgeschickte X-Mailer-Header potentiellen Angreifern unnötigerweise zusätzliche Informationen über das verwendete Mailprogramm.

Um den korrekten Return-Path-Header zu setzen und die Übertragung des X-Mailer-Headers zu unterdrücken, müssen wir nicht direkt in den Quelltext eingreifen, sondern können einen sogenannten „Hook“ nutzen. Mit Hooks ist die Erweiterung des WordPress-PHP-Codes an festgelegten Schnittstellen möglich. Der WordPress-Kern wird bei dieser Art der Programmierung nicht verändert und unsere Erweiterungen bleiben auch bei etwaigen Updates erhalten.

Man unterscheidet zwei Arten von Hooks, nämlich „Actions“ und „Filter“. Mit Actions kann man den WordPress-Kern um zusätzliche Funktionen ergänzen oder vorhandene Routinen anpassen. Sie werden durch bestimmte Ereignisse innerhalb von WordPress ausgelöst. Filter dienen dazu, Daten aus der Datenbank vor der Ausgabe im Browser zu modifizieren oder Eingabedaten aus dem Browser für die Datenbank aufzubereiten.

Für unsere Mail-Header-Modifikationen werden wir einen Action-Hook verwenden. Hierzu definieren wir eine Action-Funktion phpmailer_header_fix, die mit Hilfe der Hook-Funktion add_action() mit dem vordefinierten Ereignis phpmailer_init verknüpft wird. Mit dem Eintreten dieses Ereignisses erhalten wir Zugriff auf das Objekt $phpmailer, das für den E-Mail-Versand zuständig ist. Der zugehörige Programmcode lautet:

function phpmailer_header_fix($phpmailer)
{
  $phpmailer->Sender = $phpmailer->From;
  $phpmailer->XMailer = ' ';
}
add_action('phpmailer_init', 'phpmailer_header_fix');

Der $phpmailer-Eigenschaft Sender, die den Return-Path beinhaltet, weisen wir die Eigenschaft From zu und stellen damit sicher, dass der Inhalt der beiden Header identisch ist. Zur Unterdrückung des X-Mailer-Headers setzen wir die Eigenschaft XMailer auf '  '. Das Leerzeichen ist wichtig, da die Zuweisung einer komplett leeren Zeichenfolge nicht zum gewünschten Ergebnis führen würde.

Man kann die Action-Funktion(en) auch in einer Klasse kapseln. Die entsprechende Klassendefinition würde dann wie folgt aussehen:

class phpmailer_header
{
  function __construct()
  {
    add_action('phpmailer_init', array($this, 'fix'));    
  }
  function fix($phpmailer)
  {
    $phpmailer->Sender = $phpmailer->From;
    $phpmailer->XMailer = ' ';
  }
}
new phpmailer_header();

In diesem Fall wird add_action statt des Namens der Action-Funktion ein Array bestehend aus dem Objektnamen und der Methode fix übergeben.

Den Programmcode kann man beispielsweise in der Datei functions.php speichern, sinnvollerweise in einem Child Theme (siehe WordPress – Child Theme erstellen).

Die beschriebenen Header-Änderungen wurden unter WordPress Version 4.5.2 getestet. Weitere Informationen zu Hooks, Actions und Filtern sowie phpmailer_init finden sich im WordPress Codex über das Plugin API und in der Referenz Plugin API/Action Reference/phpmailer init.

Schreibe einen Kommentar