Wie können in WordPress Formular-Komponenten wie Contact Form 7 oder das (kostenpflichtige) Gravity Forms funktionieren, wenn der WordPress-Server nicht die Mails verarbeitet? Weil beispielsweise ein externer Mailserver für die Zustellung eingerichtet ist? Wir haben die Lösung. Vielleicht nicht lehrbuchreif. Dafür funktioniert’s – sogar mit den „richtigen“ Absender-Namen und E-Mail-Adresse.

Es kommt öfter vor, als einem bewusst ist, dass der Mailserver einer Domain nicht vom selben Server gestellt wird. Wir bei der workin media nutzen beispielsweise die Google Apps for Business um effektiv und zentral unsere Mails verwalten zu lassen. Das heißt aber auch, dass WordPress-Formulare nicht mehr funktionieren, da diese standardmäßig mit der php-Funktion mail verschickt werden wollen. Ob dies klappt oder nicht, bekommt ihr dadurch zu spüren, ob ihr bei neuen Kommentaren, Updates, etc. von eurer Seite per Mail benachrichtigt werdet oder nicht (natürlich auch via phpinfo()).

Oder eben, weil Mails aus Formularen nicht ankommen. Und das ist tatsächlich etwas tricky, weil beispielsweise Contact Form 7 dem Nutzer gute Miene zum bösen Spiel macht und zwar auf der Seite anzeigt, dass die Nachricht versendet. Es aber nicht macht.

Die Lösung: Mailversand via SMTP. Da können wir euch eine Lösung anbieten, indem ihr im Code rumflickelt. Oder ein Plugin, was das für euch übernimmt.

Die Codelösung

Zunächst editiert ihr eure config.php im Stammverzeichnis der WordPress Installation und fügt folgenden Code ein:

[php]
// SMTP
function smtp_wp_mail($phpmailer) {
$phpmailer->IsSMTP(); // telling the class to use SMTP
$phpmailer->Host = „smtp.example.com“; // set the SMTP server host
$phpmailer->Port = 465; // set the SMTP server port
$phpmailer->SMTPSecure = „ssl“; // enable SMTP via SSL
$phpmailer->SMTPAuth = true; // enable SMTP authentication
$phpmailer->Username = „wordpress@example.com“; // set the SMTP account username
$phpmailer->Password = „PASSWORD“; // set the SMTP account password
}[/php]

Die entsprechenden Felder müsst ihr mit den Daten eures externen Mailproviders befüllen.

Als nächstes müsst ihr in der wp-includes/pluggable.php WordPress noch klar machen, dass ihr Mails nun via SMTP verschicken wollt.  Sucht bitte $phpmailer->IsMail(); und ersetzt die Zeilen mit der folgenden Version:

[sourcecode firstline=“435″ language=“php“]
// Set to use PHP’s mail()
// $phpmailer->IsMail();

//SMTP
smtp_wp_mail($phpmailer);[/sourcecode]

Bei jeder WordPress-Aktualisierung können diese Änderungen verloren gehen.

Die Plugin-Lösung

WP SMTP Mail bietet direkt im Backend ein Formular, um den Mailversand zu definieren.

WP SMTP Mail im Dashboard

Für einige ist die Plugin-Lösung der einfachere Weg, wobei das Plugin nichts anderes macht, als wir weiter oben beschrieben. Nur eben im WordPress-Backend in einer netten Formular-Ansicht. Wir nutzen hier WP Mail SMTP.

Das Problem, was es beim SMTP-Versand geben kann, ist ärgerlich: Viele Server verbieten es (zu Recht!) Mails unter falschen Namen zu versenden.

Wenn allerdings ein Nutzer ein Kontaktformular auf eurer Seite verwendet, wollt ihr auch, dass das Kontaktformular von eben jener Person kommt. Martina Musterfrau (martina@musterfrau.de) benutzt dann zwar das Formular – die Mail von WordPress kommt aber über den SMTP-Account, den wir vorher definiert hatten. Und wenn ich dann Frau Musterfrau schnell antworten möchte und nicht daran denke, schreibe ich leider dem SMTP-Account eine Mail.

Es gibt allerdings noch andere Probleme: Beispielsweise kann man so Kontaktformulardaten nicht an Ticketsysteme wie osTicket, OTRS oder Zendesk übergeben, da durch die falsche Zuweisung die Systeme ad absurdum geführt werden und immer eine händische Korrektur des Absenders nötig wäre. Dafür, dass solche Systeme Arbeit abnehmen sollen und eben nicht zusätzliche verursachen, war das für uns nicht tragbar.

Die Lösung bei Contact Form 7

Zusätzliche Kopfzeilen

Zusätzliche Kopfzeilen

Bei  Contact Form 7 gibt es das von mir sträflich übersehene Zusatzfeld „Zusätzliche Kopfzeilen“, was beispielsweise dazu gedacht ist, Antwortadressen hinzuzufügen. Dann bekommt ihr zwar immer noch eine Mail von eurem Account. Wenn ihr Antwortet, wird aber dem richtigen Absender geantwortet. Außerdem funktioniert die Weiterleitung zu beispielsweise Zendesk perfekt.

Gebt einfach (mit den Standardformular-Tags) folgenden Code in das Feld ein:

Reply-To: [your-name] <[your-email]>

Denkt an das Leerzeichen zwischen den beiden Tags. Und alle sind glücklich.