Elektronische Mail ist eine der ersten Service gewesen, die bei der Vernetzung von Computern eine Rolle gespielt haben. Schon sehr früh wurde das Mail-Format (RFC 822) für Internet-Mail definiert und von den verschiedenen Systemen implementiert. Im Gegensatz zu den anderen Unix bzw. Internet Services hält sich das Mail-Prinzip nicht so eindeutig an die Trennung zwischen Client und Server. Zumindestens existiert keine unmittelbare Kommunikation zwischen Mailclient und Mailserver.
Was ist ein Linux Mail Server
Im Bereich der Mail unterscheidet man zwischen dem Mail Transport Programm (MTA – Mail Transport Agent) und dem Mail Userprogramm (MUA – Mail User Agent). Der User-Agent ist das Programm mit dem Anwender Mail versenden und eingegangene Mail lesen. Diese Programme existieren unter allen Betriebssystemen, bekannte Vertreter sind unter Windows Outlook, Outlook-Express, Eudora, Foxmail u.ä. Unter Unix kommen oft spartanische Programme wie mail, elm oder pine zum Einsatz, es gibt aber auch hier graphische Programme wie etwa xfmail. Unter allen Systemen steht der Netscape-Communicator zur Verfügung, der ein eigenes Mailprogramm mitbringt.
Auf der anderen Seite der Medallie stehen die Mail-Transport-Agents, die Programme, die sich um die Weiterleitung der Mail kümmern, die also eine Mail von Rechner zu Rechner schicken, bis sie ihr Ziel erreicht.
In den guten alten Zeiten der Unix-Großrechner wars das, heute gibt es zusätzlich noch Zwischenprogramme, die die Übertragung der Mail zwischen dem letzten Mailserver im Internet und dem Rechner des Empfängers übernehmen, da diese Übertragung meist mit dem POP3 Protokoll stattfindet.
Um uns also den heutigen Stand der Dinge klarzumachen könnte man schematisch den Ablauf von ein- und ausgehender Mail wie folgt darstellen:
Schematischer Ablauf Mail Server unter Linux
Eine Mail wird also erstellt mit dem MUA, der schickt sie intern in die Ausgangswarteschleife. Das Programm sendmail (oder manchmal, seltener smail) überprüft in regelmäßigem Abstand, ob Aufträge in der Warteschlange sind. Wenn ja, dann sendet sendmail diese Aufträge an einen voreingestellten Mailserver im Internet mit dem Protokoll SMTP (Simple Mail Transfer Protocol). Dieser Mailserver sendet die Mail seinerseits weiter zum Empfänger, wieder mit dem SMTP Protokoll. In beiden Fällen kommunizieren hier die Programme sendmail mit ihresgleichen. Sowohl der Sender, als auch der Empfänger ist hier sendmail. Das heißt, dass zumindestens auf den Rechnern im Internet sendmail als Daemonprozess im Hintergrund ständig laufen muß.
Einmal auf dem Zielrechner (im Internet) angekommen wird die Mail in die Eingangswarteschleife dieses Rechners gehängt. Erst wenn der eigentliche Empfänger dort überprüft, ob er Mail hat, wird eine Verbindung mit dem POP3 Server des Internet-Zielrechners aufgebaut. Der passende Client auf unserem lokalen Rechner heißt meist fetchmail oder popclient. Der POP-Server überträgt die Mail nun via dem POP3 Protokoll (oder moderner mit IMAP) an unseren lokalen Rechner. Der dort laufende Client fügt die Mail wieder in die Eingangswarteschlange ein, wo sie wiederum vom MUA gelesen werden kann.
Ein- und Ausgangswarteschlange
Zentrales Element der Mailverwaltung unter Unix sind die Ein- und Ausgangswarteschlangen für die Mail. Im Gegensatz zu anderen Betriebssystemen hat Unix zentrale Warteschlangen, die vom System selbst zur Verfügung gestellt werden. Das hat den Vorteil, dass verschiedenste Programme darauf zugreifen können, da der Aufbau dieser Warteschlangen genormt und transparent ist.
Wie schon in verschiedenen Fällen gesehen (cron, at, yast) schicken auch diverse Programme Mails an ihre Benutzer. Die E-Mail ist also grundsätzlich ein eingebettetes Mittel zur Kommunikation im System, nicht nur zwischen Usern.
Die Warteschlangen für die Mail sind unterschiedlich konzipiert, was Ein- und Ausgang betrifft. Die Ausgangswarteschleife ist ein Verzeichnis (üblicherweise /var/spool/mqueue oder /var/mqueue) in dem jede ausgehende Mail als Datei abgelegt ist. Zu jeder Maildatei (df…) gibt es eine passende Queue-Datei (qf…) und evt. noch eine Transferberichtsdatei (xf…). Das Programm sendmail, das üblicherweise für das Auslesen der Warteschlange zuständig ist, kann anhand dieser Dateien jeden Auftrag abarbeiten.
Die Eingangswarteschleife hat eine andere Form. Im Verzeichnis /var/spool/mail existiert für jeden User (der schon einmal Mail bekommen hat), eine Datei mit seinem Namen. Dort sind alle Mails nacheinander abgelegt. Wenn der User seine Mail mit einem MUA ließt, wird sie gewöhnlich in sein Homeverzeichnis wiederum in ein Verzeichnis mit dem Namen ~/Mail verschoben.
Das Betriebssystem selbst überprüft in regelmäßigen Abständen, ob sich die Datei /var/spool/mail/username verändert hat und benachrichtigt den User entsprechend. Dabei unterscheidet es zwiscvhen „new mail“ und „mail“. Eine „new mail“ ist eine, die noch nicht gelesen wurde, eine „mail“ ist eine Nachricht, die schon als gelesen markiert ist, jedoch noch immer im Spoolverzeichnis verblieben ist.
Zusammenfassend kann also das Mailsystem in unterschiedliche Komponenten aufgeteilt werden. Die Konfiguration dieser einzelnen Komponenten ist im folgenden beschrieben: