In der Vergangenheit habe ich oft sSMTP verwendet, um Mails von einem Webserver schnell und einfach an einen „richtigen“ SMTP-Server im Netz zu verschicken. Nachteil dabei ist allerdings, dass sSMTP keine eigene Mail-Queue hat, sondern bei jedem Aufruf als Prozess ausgeführt wird. Zum einen ist dies problematisch, wenn viele Mails verschickt werden. Aber selbst bei kleinen Seiten kann es zu merklichen Verzögerungen im Frontend einer Website kommen, beispielsweise im Mailformular. Denn der Verbindungsaufbau und die Authentifizierung zum externen können eine Weile dauern, zumindest so lange, dass der Benutzer es merkt.

Es gibt eine Lösung dafür: Ein eigener Mailserver mit einer Mail-Warteschlange. Denn dann übergibt der Webserver (z.B. über PHP/sendmail-Befehl) die neu erzeugte Mail an den Mailserver-Prozess, der diese dann im Hintergrund abarbeitet. Im folgenden zeige ich dies anhand von Postfix. Lösungen für andere Mailserver sehen natürlich anders aus, auf Rückmeldungen dazu freue ich mich in den Kommentaren.

Postfix als Relay installieren

Zunächst muss man Postfix als Relay installieren. Unter Ubuntu oder Debian läuft dies einfach mit:

Wichtig ist nun, die korrekten Einstellungen zu wählen:

  • Postfix Configuration/Konfiguration: Satellite system bzw. Satellitensystem
  • System mail name/System-E-Mail-Name: Hier ist es wichtig, einen Namen einzugeben, den der Relay-Server akzeptiert. In der Regel ist das der Domainname der Organisation (also z.B. meine-firma.de). Die Einstellung ist eigentlich nur wichtig für Mails, bei denen der Absender keinen Domainnamen im FROM stehen hat, also z.B. Mails an root oder von der Kommandozeile aus. Dennoch lohnt es sich, hier etwas sinnvolles einzutragen, um das ganze zu testen.
  • SMTP relay host/SMTP-Relay-Server: Name oder IP des SMTP-Servers

Noch einmal zu den Domain-Namen: Die meisten Mailserver sind so konfiguriert, dass sie keine Mails weiterleiten, die von nicht-akzeptierten Domainnamen kommen. Wenn der Webserver also web.meine-firma.de heißt und Mails z.B. von xyz@web.meine-firma.de verschickt werden, wird der Mailserver diese Mail in der Regel verwerfen. Die Mails müssen nämlich von xyz@meine-firma.de verschickt werden, das muss man bei den Einstellungen auf der Website beachten!

Authentifizierung

Ist der Mailserver im Intranet, genügen die Standard-Einstellungen zumeist bereits. Im Internet muss man sich beim Verschicken der Mails ja in der Regel authentifizieren. Dazu sind einige weitere Schritte notwendig.

Zunächst erweitern wir die Postfix-Einstellungen über postconf (alternativ kann man main.cf ändern):

In Zeile 1 wird festgelegt, dass Verbindungen verschlüsselt werden (weglassen, wenn das nicht funktioniert, dann wird aber alles unverschlüsselt übertragen!). Die restlichen Zeilen legen die Einstellungen fest, wie die Authentifizierung abläuft. Wir bereiten hier eine Password-Map vor. Diese kann viel mehr als wir hier machen, es ist z.B. möglich, für verschiedene FROM-Benutzer verschiedene Relays festzulegen.

Hier der einfachste Fall: Alle Mails des Webservers werden über den Relay-Server weitergeleitet.

Der obige Befehl erstellt die Datei /etc/postfix/relay_passwd mit den entsprechenden Einstellungen. In der ersten Spalte muss man den Relay-Host-Namen oder dessen IP eingeben. Die zweite Spalte enthält den Benutzernamen und das Passwort bei dem man sich auf dem Relay-Host anmeldet. Getrennt werden beide durch einen Doppelpunkt.

Zum Abschluss sichert man die Datei und startet Postfix neu:

Testen

Um die Einstellungen zu testen, kann man den mail-Befehl verwenden:

Ob es klappt, sieht man im Postfach, bzw. in den Log-Dateien unter /var/log/mail.log.