Viele Drupal-Projekte benötigen Email-Funktionalitäten, sei es für die Registrierung von Nutzern oder für Benachrichtigungsdienste, z.B. um Nutzer über neue Beiträge oder Kommentare zu informieren.
Da Entwickler häufig mit einer lokalen Drupal-Version arbeiten, benötigen sie zum Testen einen SMTP-Mail-Server, mit dem das Drupal-System Emails an Test-User verschicken kann.
Dies ist nicht so einfach, wie es zunächst aussieht. Mail-Server-Software ist in der Regel ziemlich sperrig und wer sich nicht gerade für den geborenen Administrator hält, kommt hier leicht ins Schwitzen.
Da ich selbst ungerne mit virtuellen Maschinen arbeite, verwende ich das robuste XAMPP als PHP-Entwicklungsumgebung. Leider ist der mitgelieferte Mercury-Mail-Server zumindest in den Versionen XAMPP 1.8.2 und 1.8.3 fehlerhaft eingestellt. Konfigurationsparameter lassen sich nicht speichern und damit ist der Mail-Server nutzlos.
Man kann sich natürlich auf die Suche nach den Ursachen machen. Es könnte sein, dass die Pfadangaben in der zugehörigen Ini-Datei nicht stimmen. Da aber die richtige Einstellung zur Sisyphos-Aufgabe wird, wenn man sich mit dem Programm nicht sehr gut auskennt, wurde dieser Weg von mir verworfen.
Auch Drupal selbst ist bezüglich seiner Basis-Mail-Funktionalität etwas buggy und will partout keine Mails an den Mail-Server verschicken, selbst wenn man erwartungskonform in der php.ini unter [mail function] folgendes aktiviert und einstellt:
[mail function] ; XAMPP: Comment out this if you want to work with an SMTP Server like Mercury SMTP = localhost smtp_port = 25 ; For Win32 only. ; http://php.net/sendmail-from sendmail_from = postmaster@localhost
Es schadet nicht, das einzustellen, aber die Mail-Funktionen von Drupal funktionieren trotzdem noch nicht.
Wenn nun zwei Systeme nicht erwartungskonform reagieren hat das meist zur Folge, dass man ein oder zwei Nachmittage damit verschwendet, die Probleme zu finden und sein System richtig einzurichten.
Im folgenden sollen deshalb die Schritte für die Einrichtung eines funktionierenden lokalen Mercury-Mail-Servers so dargestellt werden, dass zumindest meine Leser sich diese Zeit schenken und für ihre eigentlichen Entwicklungsaufgaben nutzen können.
Einrichtung eines Mercury-Mail-Servers und Drupal für den Mail-Versand
Auf den Mercury-Mail-Server von XAMPP wird im folgenden verzichtet, da dieser offensichtlich fehlerhaft parametrisiert ist. Stattdessen wird ein Mercury-Mail-Server komplett neu installiert in einem eigenen Verzeichnis außerhalb von XAMPP. Vorher wird aber noch Drupal entsprechend vorbereitet.
Download, Installation und Einstellung des Drupal-Moduls SMTP
Dafür wird das Drupal-Moduls SMTP Authentication Support heruntergeladen und installiert. Dieses Modul überbrückt die php.ini-Einstellungen unter [mail function].
Es gibt nur einen Eintrag, den man im Konfigurationsformular (admin/config/system/smtp) leisten muss.
Abb. 1: Konfiguration des Drupal-Moduls SMTP
Als SMTP-Server wird localhost eingestellt. Außerdem wird das Modul mittels des Radio-Buttons "Turn on" aktiviert. Die übrigen Default-Einstellungen behält man bei.
Danach geht man auf die Konfigurationsseite Site information des Portals: (admin/config/system/site-information). Dort gibt man als Email-Adresse an: postmaster@localhost.com.
Ganz wichtig ist, dass die Mail eine Hauptdomain-Endung besitzt, denn sonst wird die Mail von der Validierung nicht akzeptiert.
Die gleiche Email kann man dann für den User Admin einstellen (user/admin). Außerdem sollte man alle Emails der übrigen vorhanden User des Portals entsprechend anpassen.
Drupal ist jetzt für das Versenden von Emails "ready to go". Wenn es nicht funktioniert, liegt es garantiert am Mercury-Mail-Server.
Download und Installation des Mercury-Mail Servers
Wir laden uns einen frischen Mercury-Mail-Server herunter, z.B. die
- Version Mercury/32 Mail Transport System for Win32 and NetWare Systems v4.74
und zwar von der Download-Seite von Pegasus Mail. Den Pegaus Mail Client benötigt man übrigens nicht - also nicht verwechseln. Man sollte seinen gewohnten Mail-Client zum Testen verwenden.
Während der Installation werden alle möglichen Fragen zur Konfiguration gestellt. Diese dienen hauptsächlich der initalen Konfiguration, d.h. man kann das meiste später wieder ändern.
Die erste Frage bezieht sich darauf, wohin man Mercury speichern soll. Man sollte hier auf keinen Fall das XAMPP-Verzeichnis wählen. Man fährt immer gut, wenn man die Einstellung bei dem vorgeschlagenen Directory belässt.
Man benötigt als Protokolle nur die für den SMTP-Server und den POP3-Server (s. Folgeformular bei der Installation, Abb. 2).
Abb. 2: Einstellung der benötigten Protokolle für den Mercury-Mail-Server
In einer weiteren Abfrage wird nach dem zu installierenden SMTP-Client gefragt. Man benötigt diesen eigentlich nicht. Wenn doch, dann sollte man sich für MercuryE entscheiden. Aber wie gesagt, für unsere Testumgebung ist ein SMTP-Client nicht erforderlich.
Abb. 3: Auswahl eines SMTP-Clients für den Mercury-Mail-Server
Bei den anderen Abfragen sollte man es bei den Default-Vorschlägen belassen. Diese können später jederzeit abgeändert werden.
Natürlich sollte man ab jetzt auf den Start von Mercury per Control-Panel von XAMPP immer verzichten und stattdessen den neu installierten Mail-Server gesondert aufrufen.
Einstellung des Mercury-Mail-Servers
Alle Einstellung des Mail-Servers erfolgen nun unter dem Menupunkt Configuration und werden im folgenden der Reihe nach vorgestellt.
Abb. 4: Mercury Core Modul / General / Internet name des Systems: localhost
Abb. 5: Mercury Core Modul / Local domains / Internet Namen
Wichtig ist, dass hier Internet-Namen mit Top-Level-Domain-Endung angegeben werden, insbesondere sollte in der Liste localhost.com erscheinen, da wir diese Domain über unsere Drupal-Konfiguration ansprechen.
Nicht vergessen werden sollten die Eintragungen dieser Domains in die host-Datei von Windows (C:\Windows\System32\drivers\etc\hosts). Dort müssen die in der Konfiguration getroffenen Zuordnungen ebenfalls zu finden sein, z.B.
- 127.0.0.1 localhost.com.
Als nächstes wird der SMTP Server eingestellt (Abb. 6 und Abb. 7).
Abb. 6: Mercury SMTP-Server / General / Announce myself as: MyMercuryForWin
Abb. 7: Mercury SMTP-Server / Connection control / Add restrictions: Ip address range
Nun müssen wir den POP3-Server des Mail-Servers parametrisieren (Abb. 8 und Abb. 9)
Abb. 8: Mercury Pop3-Server / General / Ip-Interface to use: 127.0.0.1
Abb. 9: Mercury Pop3-Server / Connection control / Add restrictions: Ip address range
Nachdem das geschafft ist, richten wir als letztes den Drupal-System-User postmaster@localhost.com sowie einige Test-User ein und zwar mit dem Menupunkt Configuration/Manage local users (Abb. 10).
Abb. 9: Mercury / Configuration / Manage local users: Einrichten von Usern.
Die Einstellungen werden übrigens erst wirksam, wenn man den Mercury-Mail-Server neu startet.
Mit dieser Konfiguration sollte es jetzt einem der Test-User möglich sein, sich im Drupal-System als authentifizierter User zu registrieren.
Damit das funktioniert, muss man für diese User noch Konten in seinem gewohnten Mail-Client (Thunderbird, Microsoft Exchange, ...) einrichten, damit sie von Drupal überhaupt System-Mails emfangen können.
Für den User Hugo benötigt man z.B. folgende Angaben:
- Konten-Bezeichnung: hugo@localhost
- Name: Hugo
- E-Mail-Adresse: hugo@localhost
- Pop3-Server: localhost
- Passwort: test
Außerdem benötigt der Mail-Client noch die Einrichtung eines SMTP-Servers, falls die User auch Nachrichten verschicken sollen. Für die Drupal-Registrierung ist dies direkt zwar nicht, aber für andere Test-Szenarios bald erforderlich. Außerdem ist das schnell gemacht. Angegeben werden muss dafür bei der Einrichtung außer einem frei wählbaren Bezeichner, z.B. mercury localhost, hauptsächlich nur der Name des Postausgangsservers und der ist für Mercury localhost.
Zusammenfassung
Die Einrichtung eines lokalen Mail-Servers ist für Ungeübte immer eine Herausforderung. Kennt man die Fallstricke, die zu beachten sind, kann man sich viel Zeit sparen.
Gegenüber einer intuitiven Vorgehensweise (Einstellung in php.ini, Verwendung von XAMPP's Mercury, Einstellung der einfachen System-Email-Adresse postmaster@localhost ohne Top-Level-Endung auf der Drupal Konfigurationsseite Site informations), die leider nicht zum Ziel führt, funktioniert aber folgendes:
- Installations eines separaten Mercury Mail-Servers für Windows,
- Installation und Aktivierung des Drupal Moduls SMTP,
- Einrichtung einer System-Mail-Adresse postmaster@localhost.com, also mit Top-Level-Domain-Endung, unter Drupals Site informations.
Anmerkungen
Es gibt eine Alternative zur Verwendung von Mercury als lokalen Mail-Server. Man kann auch GMail sehr gut dafür nutzen. Da diese Alternative interessant ist, verweise ich auf dieses Tutorial. Allerdings sollte man sich fragen, ob es Sinn macht, für eine lokale Testumgebung einen externen Dienstleister zu benutzen.
Ein letzter Hinweis sei erlaubt zum Thema Email-Validierung. Leider benutzt das Modul SMTP dafür eine eigene Funktion und nicht die vom Drupal-Core-System zur Verfügung gestellte Funktion valid_email_address($email). Dies kann beim Testen und Entwickeln zu großen Mißverständnissen führen.
Falls also jemand aus irgendwelchen Gründen - z.B. um Problemen bei der Email-Validierung auf den Grund zu gehen - auf die Idee kommt, die Drupal-Core-Funktion in includes/common.inc kurschließen zu wollen, wird ihm das nicht viel nutzen, es sei denn, er schließt die entsprechende Funktion zur Email-Validierung im Modul 'smtp' ebenfalls kurz (Funktion ValidateAddress($address) in smtp.phpmailer.inc im Modulverzeichnis).
Dies nur als Hinweis für die Fehlersuche oder als letzten Ausweg, falls irgendwelche Umstände keine validen Emails auf der lokalen Umgebung zulassen.