Einen lokalen Mail-Server einrichten

Vorwort

Meinen ursprünglich 2002 veröffentlichten Artikel „Der eigene lokale Webserver“ habe ich nie wirklich überarbeitet. Ich hatte es mir immer vorgenommen, aber nie die richtige Motivation dazu gefunden. Außerdem verwenden die meisten Leute zum Testen fertig konfigurierte Pakete wie XAMPP. Ich halte nicht viel von solchen Paketen, weil ich ganz einfach gerne alles selbst konfiguriere und dadurch auch mein Verständnis von den internen Abläufen verbessern kann. Aber da es diese Pakete schon seit langer Zeit gibt, gibt es nun mal auch entsprechenden Bedarf.

Aus diesem Grund habe ich mich dazu entschlossen, erst mal nur den beliebtesten Teil des Artikels über den Mail-Server zu überarbeiten (irgendwie habe ich in diesen Teil auch immer die meiste Arbeit reingesteckt). Wichtig war mir vor allem, von dem ursprünglich empfohlenen Produkt wegzukommen (der Autor hat die Hauptarbeit in die kommerzielle Variante gesteckt) und eine alternative Software zu verwenden.
Sollte es sich irgendwann mal die Gelegenheit ergeben, auch die anderen Teile über Apache, PHP und Perl zu überarbeiten, werde ich diese nachreichen.

Warum ein lokaler Mail-Server?

Sie werden vermutlich irgendwann mal auf die Idee kommen, serverseitige Scripts zu schreiben, die eine Mail versenden sollen. Dafür ist ein eigener SMTP-Server sehr wichtig. Sie werden wahrscheinlich denken, dass Sie doch zum Beispiel einfach den Server von GMX oder WEB.DE nehmen können. Das ist nicht empfehlenswert, denn meistens sind diese Server geschützt und es lohnt sich einfach nicht, in sein Script einen Mechanismus einzubauen, der die Authentifizierung umsetzt. Und schließlich können Sie mit Ihrem eigenen Mail-Server das machen, was Sie wollen. Sie können massenhaft Test-Mails an Ihre lokalen Postfächer verschicken, ohne dass ein E-Mail-Anbieter damit ein Problem haben könnte.

In diesem Artikel wird die Software hMailServer vorgestellt. Dieser Mail-Server ist kostenlos und bietet viele interessante Features, die es ermöglichen, ihn auch im professionellen Bereich einzusetzen.
Schade ist jedoch, dass die Weiterentwicklung dieser Software ins Stocken geraten ist. Die momentan (Mai 2012) aktuelle Version 5.3.3 wurde am 07.06.2010 veröffentlicht. Jedoch funktioniert die Software unter aktuellen Betriebssystemen und für lokale Tests ist sie in jedem Fall ausreichend. Die Community ist ebenfalls sehr aktiv.

Getestet habe ich hMailServer unter Windows XP und Windows 7. Die Einrichtung ist unter beiden Systemen gleich.

Mail-Server einrichten

Das erste, was Sie machen müssen, ist das Programm unter http://www.hmailserver.com/ runterzuladen.

Nachdem Sie das Setup-Programm heruntergeladen haben, können Sie es ausführen. Sie können im Setup einfach immer auf Next klicken, die vorgegebenen Einstellungen sind in Ordnung (wichtig ist eine Full-Installation mit Server und Administrations-Tools sowie dass hMailServer Microsoft SQL Compact als Datenbank verwendet). Nachdem das Setup alle Dateien kopiert hat, können Sie ein Admin-Passwort für den Mail-Server vergeben.

Nachdem das Setup komplett abgeschlossen ist, startet das Admin-Tool (Sie finden es später unter StartProgrammehMailServerhMailServer Administrator):

Administration hMailServer - Server auswählen

Wählen Sie den localhost aus und klicken Sie auf Connect. Wenn Sie möchten, können Sie das Kontrollkästchen bei Automatically connect on startup aktivieren, dann erscheint der Auswahlbildschirm nicht mehr und das Admin-Tool verbindet sich automatisch mit dem lokalen Mail-Server. Nun müssen Sie noch das im Setup eingegebene Admin-Passwort eingeben und auf OK klicken.

Es erscheint das eigentliche Admin-Tool:

Administration hMailServer - Start

Klicken Sie auf Add domain. Im nun erscheinenden Fenster geben Sie einen Namen für Ihre lokale Domain ein, beispielsweise test.local, und bestätigen Sie mit Save.
Es wird nun die neue Domain angelegt. Das erkennen Sie daran, dass im linken Baummenü die neue Domain erscheint und Sie Postfächer und Weiterleitungen anlegen können. Deswegen werden wir jetzt auch ein erstes Postfach anlegen! Klicken Sie dazu auf Accounts und dann auf Add.

Administration hMailServer - Postfach anlegen

Geben Sie im Feld Address den Teil ein, der vor dem @ erscheinen soll (z.B. ich). Im Feld Password können Sie noch ein Passwort für das Postfach vergeben. Klicken Sie zum Abschluss auf Save. Sie haben nun die E-Mail-Adresse ich@test.local angelegt!

Sie haben nun einen voll funktionierenden Mail-Server mit einem Postfach. Wenn Sie das Postfach in Ihrem E-Mail-Programm einbinden möchten, verwenden Sie als Posteingangs- und Ausgangsserver den localhost. Ihr Benutzername für das Postfach ist die vollständige E-Mail-Adresse des Postfaches.

Anmerkungen:

PHP konfigurieren

PHP bringt von Haus aus die mail()-Funktion mit. Dieser Funktion müssen Sie beibringen, auf den lokalen Mail-Server zuzugreifen.
Dazu öffnen Sie Ihre php.ini (wählen Sie am besten StartAusführen und geben Sie php.ini ein). Suchen Sie nun nach dem Abschnitt [mail function]. Die Voreinstellung SMTP = localhost ist in Ordnung (der Mail-Server ist ja der localhost). ändern Sie nur noch sendmail_from = me@localhost.com. Tragen Sie anstatt me@localhost.com beispielsweise die Adresse des Postfachs ein, das Sie vorhin eingerichtet haben. Wählen Sie nun noch "Speichern" aus "Datei" und schließen Sie den Editor. Fertig!

Mails unter Perl versenden

Bei Perl gibt es zwei Möglichkeiten, E-Mails zu versenden:
Die erste, empfehlenswertere Variante ist, sich mit einem der vielen Perl-Module, die Mails versenden können, vertraut zu machen. Das beliebte Net::SMTP gehört seit Perl 5.8 zu den Standard-Modulen und ist im Grunde genommen alles, was Sie brauchen. Zusätzlich finden Sie im CPAN-Archiv etliche weitere Module zum Versenden von Mails. Empfehlenswert ist hier unter anderem Mail::Sendmail, ein systemunabhängiger Mailer, der mit Socket-Kommunikationen arbeitet und aus nur einer Datei besteht, weshalb er sich prima weitergeben lässt. Für komplexe Mails, die über Anhänge usw. verfügen sollen, empfiehlt sich MIME::Lite.
Viele Scripts (vor allem ältere) rufen mit open() ein auf dem Server installiertes Kommandozeilenprogramm auf (z.B. sendmail) und geben die Mail an dieses Programm weiter. Für ein einfaches Script ist dies sicher ausreichend, jedoch hat dieser Ansatz das Problem, dass er oft nur auf Unix-Systemen richtig funktioniert.
Es gibt auch Perl-Module, die wahlweise über einen SMTP-Server oder über ein externes Programm die Mail versenden, ein Beispiel wäre hierbei Mail::Mailer.