E-Mail
Willemers Informatik-Ecke

An einigen Stellen wird der Mail-Server sendmail erwähnt, insbesondere die beiden Beispiele beruhen auf sendmail. Inzwischen ist sendmail weitgehend von Postfix (oder anderen Mail-Servern wie Exim) abgelöst worden. An dem grundlegenden Aufbau einer Mail und dem SMTP-Protokoll ändert dies allerdings nichts.

Mail ist Standard unter UNIX

E-Mail ist auf UNIX-Maschinen schon immer ein Standardkommunikationsmittel gewesen. Dabei war anfangs nur die Kommunikation der Anwender einer Maschine untereinander möglich. Diese Kommunikationsform ist fester Bestandteil eines UNIX-Systems, so dass sie auch für Systemmeldungen verwendet wird. So senden beispielsweise crontab und at ihre Ausgaben nach wie vor per E-Mail an den Anwender. Auch Druckerprobleme werden dem Anwender per E-Mail zugesandt. Richtig interessant wird E-Mail aber erst rechnerübergreifend im Netzwerk.

Format einer E-Mail

RFC822 bestimmt die Form einer Mail

E-Mails sind Texte, die ein bestimmtes Format haben, das in der RFC 822 beschrieben wird. Der erste Teil ist der Header, durch eine Leerzeile abgetrennt folgt der eigentliche Inhalt. Die erste Zeile des Headers beginnt mit From: gefolgt von einem Leerzeichen. Darauf folgt die E-Mail Adresse des Empfängers. In dieser Zeile notiert der Host seine Sendeinformationen. Die restlichen Zeilen beschreiben die Attribute der Mail. Der Feldname steht zuerst. Ein Doppelpunkt und ein Leerzeichen trennen den Inhalt, der bis zum Ende der Zeile geht.

Typische Feldnamen sind:

Feldname Inhalt
From: E-Mail Adresse des Absenders
To: E-Mail Adresse des Empfängers
Subject: Das Thema der Nachricht
Date: Das Sendedatum
Reply-To: E-Mail Adresse, an die der Absender die Antwort wünscht (optional)

Bei der Übermittlung der Mail setzt jede Vermittlungsstation ihren Stempel in den Header einer E-Mail. So sieht der Header einer E-Mail beispielsweise so aus:

Return-Path: <stephan.mattescheck@galileo-press.de>
Received: from localhost (localhost [127.0.0.1])
        by gaston.willemer.edu (8.11.6/8.10.2/SuSE Linux 8.10.0-0.3) with ...
        for <arnold@localhost>; Wed, 16 Jan 2002 13:35:42 +0100
Received: from pop3.web.de [217.72.192.134]
        by localhost with POP3 (fetchmail-5.9.0)
        for arnold@localhost (single-drop); Wed, 16 Jan 2002 13:35:42 +0100 (CET)
Received: from [212.227.126.171] (helo=moutng1.schlund.de)
        by mx10.web.de with esmtp (Exim 4.02 #6)
        id 16QoC7-0005m8-00
        for arnold.willemer@web.de; Wed, 16 Jan 2002 12:25:27 +0100
Received: from [212.227.126.150] (helo=mxng07.kundenserver.de)
        by moutng1.schlund.de with esmtp (Exim 3.22 #2)
        id 16QoC6-0004tV-00
        for arnold.willemer@web.de; Wed, 16 Jan 2002 12:25:26 +0100
Received: from [212.79.176.2] (helo=gw-galileo-tops.tops.net)
        by mxng07.kundenserver.de with esmtp (Exim 3.22 #2)
        id 16QoC5-0002I8-00
        for arnold@willemer.de; Wed, 16 Jan 2002 12:25:25 +0100
Received: from stephan (stephan.galileo-press.de [192.168.57.228])
        by gw-galileo-tops.tops.net (8.9.3/8.9.3) with ESMTP id MAA09037
        for <arnold@willemer.de>; Wed, 16 Jan 2002 12:27:02 +0100
From: "Stephan Mattescheck" <stephan.mattescheck@galileo-press.de>
To: arnold@willemer.de
Date: Wed, 16 Jan 2002 12:26:39 +0100
MIME-Version: 1.0
Subject: Katalog
Message-ID: <3C45717F.12078.6C8A48@localhost>
Priority: normal
X-mailer: Pegasus Mail for Windows (v4.01)
Content-type: text/plain;
  charset=ISO-8859-1
Content-description: Mail message body
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from Quoted-printable to 8bit by gaston.willemer.edu ...
Status: R 
X-Status: N
 
Hallo, Herr Willemer,

Der Header ist wie eine History

Aus dem Header kann man alle Zwischenstationen entnehmen, die die E-Mail durchlaufen hat. Selbst Details, dass der Absender den Pegasus als E-Mail Client verwendet, ist herauszulesen.

UNIX und Mail

sendmail ist Zentrum der Mail

Wie schon erwähnt, verfügt eine UNIX-Maschine normalerweise auch über ein lokales Mailingsystem. Zentrales Programm ist traditionsgemäß sendmail, das mehrere Aufgaben übernimmt. Einerseits wartet sendmail als SMTP-Dämon im Hintergrund auf Aktivitäten am Port 25 und legt die empfangenen Mails in der Mailqueue ab. Es kümmert sich aber auch um die Verteilung der im Briefkasten liegenden Mails an die einzelnen lokalen Postfächer der Benutzer und es sorgt dafür, dass Mail an andere Domänen an die entprechenden Rechner weitergeleitet wird.

SMTP (Simple Mail Transport Protocol)

SMTP über Port 25

SMTP ist ein Protokoll, um Nachrichten zu versenden. Das Protokoll wird in RFC 788 und RFC 821 beschrieben. Es wird standardmäßig unter der Portnummer 25 abgewickelt. Man könnte den Port 25 also als eine Art Briefschlitz der Maschine bezeichnen. Und das Programm sendmail ist der Postbote, der die Post vom Briefkasten zur zentralen Verteilstelle schafft. Hier werden von außen Nachrichten eingeworfen, die an Benutzer dieser Maschine gehen. Die Benutzer der Maschine wiederum benutzen den lokalen Port 25, um Nachrichten an andere lokale Benutzer oder an Benutzer anderer Maschinen einzuwerfen. Alle Nachrichten werden in der Mailqueue zwischengelagert. Nachrichten an fremde Rechner reicht sendmail an die entsprechenden Rechner weiter.

SMTP Missbrauch durch Spam

Schickt allerdings ein fremder Rechner E-Mail, die für einen ganz anderen Rechner gedacht ist, gleicht sendmail den scheinbaren Fehler aus und leitet die E-Mail weiter. Das Problem ist, dass so auch Massenmails, die man auch Spam nennt, über den fremden Rechner verteilt werden können. Hat man den Absender noch geschickt gefälscht, ist der missbrauchte Rechner der einzige, der zurück zu verfolgen ist. Dieser Verhalten, das man >>Relay<< nennt, ist in den neueren Versionen von sendmail abgeschaltet. Mailservices im Internet versuchen zu erreichen, dass nur ihre Kunden SMTP nutzen können. Da SMTP von Haus aus kein Passwort verlangt, gibt es zwei Ansätze, sicher zu stellen, wer der Auftraggeber ist. Der eine Weg ist, SMTP nur zu erlauben, wenn von der gleichen TCP/IP-Nummer in einer bestimmten Zeit vorher ein POP3 erfolgreich durchgeführt wurde. Da POP3 ein Passwort verlangt, ist der Nutzer identifizierbar. Der zweite Weg ist eine Erweiterung der SMTP um eine Passwortübermittlung.

Konfiguration durch sendmail.cf

Die Konfiguration des sendmail erfolgt in der Datei /etc/sendmail.cf. Es gibt kaum eine Literatur zu sendmail, die nicht auf die Unlesbarkeit der dieser Datei eingeht. Aus diesem Grund gibt es diverse Ansätze, die Konfiguration zu vereinfachen. Ein Ansatz verwendet die Makrosprache m4. Die entsprechende Konfigurationsdatei ist dann sendmail.m4. Es ist allerdings meist gar nicht nötig, die sendmail.cf komplett zu verstehen, da man sie selten von Grund auf neu erstellt. Es reicht, die entscheidenden Einträge anzupassen. Die meisten Einträge sind durch die Grundinstallation korrekt gesetzt.

Postfix und Exim als sendmail-Ersatz

Inzwischen werden anstelle von sendmail andere Mail Transport Agents (MTA) installiert. Die prominentesten sind wohl Postfix und Exim (Standard unter Debian).

Mailqueue

Das Verzeichnis mqueue

Die Mailqueue ist ein Verzeichnis, in dem Mails vor ihrer Verteilung gesammelt werden. Alles was über den Port 25 (SMTP) eintrifft, wird hier erst einmal gelagert. Man kann die zum Versand anstehenden Mails mit dem Befehl mailq auflisten. Die Mailqueue ist ein festgelegtes Verzeichnis, normalerweise /var/spool/mqueue, in dem sich für jede Mail zwei Dateien befinden.

gaston> mailq
                /var/spool/mqueue (1 request)
----Q-ID---- --Size-- -----Q-Time----- --------Sender/Recipient-
fB2AaPI01856     2511 Sun Dec  2 11:36 <arnold@willemer.de>
      8BITMIME
                                       <willemer@t-online.de>         

Zwei Dateien für jede Mail

Zu dieser E-Mail gibt es zwei Dateien im Spoolverzeichnis der Mailqueue. Die eine Datei enthält die Versanddaten und stellt qf vor die Q-ID und die andere enthält die eigentliche Mail. Man erkennt sie daran, dass ihr Dateiname mit df beginnt. Im Beispiel sind das die Dateien dffB2AaPI01856 und qffB2AaPI01856. Der Pfad der Mailqueue wird in der Datei /etc/sendmail.cf unter dem Schlüsselwort QueueDirectory festgelegt.

O QueueDirectory=/var/spool/mqueue

Um die obige Mail aus der Queue zu entfernen, muss man als root folgenden Befehl absetzen:1)

rm /var/spool/mqueue/?ffB2AaPI01856

Verteilen der Post: sendmail -q

Eine weitere wichtige Aufgabe des sendmail ist die lokale Verteilung der Post. Der Aufruf sendmail -q bewirkt, dass die Mail der Mailqueue auf die Postfächer der lokalen Anwender verteilt wird oder an die Rechner versendet wird, deren Adresse rechts neben dem @ steht.

Lokale Verteilung

Auch beim Versenden der lokalen Mail wird die Post zunächst in die Mailqueue gestellt, sodass eine Nachricht von root an arnold erst versendet wird, wenn sendmail -q das nächste Mal durchgeführt wird. Ohne weitere Angabe wird die Verteilung genau einmal durchgeführt. Dieser Vorgang soll aber meist in regelmäßigen Abständen stattfinden. Anstatt sendmail in die crontab zu stellen, kann man einfach hinter der Option -q einen Zeitabstand angeben. Dann wird das Verteilen in diesen Abständen wiederholt.

Die Postfächer

Jeder Benutzer auf der Maschine hat ein Postfach. Dazu gibt es ein Verzeichnis (normalerweise (/var/mail oder /var/spool/mail), in dem für jeden Benutzer genau eine Datei steht, deren Name der Loginname ist. Neue Mails werden einfach hinten an diese Datei angehängt.

Weiterleiten der Post: aliases und forward

Beim Versenden von Nachrichten berücksichtigt sendmail die alias-Datei /etc/aliases. Hier stehen Adressaten und ihre tatsächlichen Zielorte. Beispiel:

root:           arnold, \root
aw: awillemer@os2aw
us: usander@os2us
all:    aw, meier@marian.mymail.de, us
owner-all:  aw

Post von root

Die erste Zeile sorgt dafür, dass E-Mails an root auch an arnold gesandt werden. Da ich normalerweise als arnold eingeloggt bin, erfahre ich nun sofort, wenn etwas im System schiefläuft. Der Eintrag \root sorgt dafür, dass die Mail aber weiterhin auch an root direkt gesandt wird.

newaliases liest aliases

Entsteht beim Senden an all ein Problem wird mit owner-all der Teilnehmer angegeben, an den die Fehlernachricht gesendet werden soll. Werden Einträge in /etc/aliases geändert, wird dies mit dem Befehl newaliases oder sendmail -bi an den Mailservice weitergeleitet.

Jeder Benutzer kann seine lokale Mail an einen anderen Rechner weiterleiten, indem er im Benutzerverzeichnis eine Datei .forward anlegt und hier die Zieladresse z. B. uwe@myserver ablegt

Lokale Mail lesen

Überall verfügbar: mail

Das standardmäßig verfügbare Tool zum Lesen der lokalen Mail nennt sich einfach mail. Es prüft das Postfach. Ist die Datei des Benutzers leer, beendet es sich sofort mit der Meldung, dass es keine Post gibt.

gaston> mail
No mail for arnold
gaston>

Wenn Post da ist, erscheint eine Liste aller vorliegenden Mails. Jede Mail hat eine Nummmer. Der Zeiger in Form eines Größerzeichen zeigt auf die erste neue E-Mail. Diese wird durch Return angezeigt. Die Anzeige erfolgt einfach per more.

gaston> mail
Mail version 8.1 6/6/93.  Type ? for help.
"/var/mail/andrea": 4 messages 1 new 4 unread
 U  1 promotion5@amazon.de  Sun Feb  3 20:58 289/12731 "Noch mehr tolle Preis"
 U  2 newsletter@jako-o.de  Thu Feb 14 14:54 110/3977  "Post von JAKO-O - Feb"
 U  3 newsletter@jako-o.de  Thu Feb 14 15:25 102/3594  "Post von JAKO-O - Feb"
>N  4 promotion5@amazon.de  Wed Feb 20 10:09 610/23184 "Alles versandkostenfr"
&

Navigieren, Lesen und Verlassen

Mit + und - kann durch die Mails vorwärts und rückwärts navigiert werden. Dabei wird jedesmal die nächste E-Mail per more angezeigt. Mit einem d kann die aktuelle Mail gelöscht werden. mail wird mit dem Kommando x verlassen, wenn keine Änderungen übernommen werden sollen oder mit q, wenn beispielsweise gelesene Nachrichten als solche markiert werden sollen und gelöschte Nachrichten tatsächlich aus dem Postfach entfernt werden sollen.

Mail versenden

Mit mail kann man auch Nachrichten versenden. Dazu ruft man mail mit der Adresse des Empfängers als Parameter auf. Es erscheint eine Zeile mit dem Subject, die man auszufüllen hat. Danach gibt man Zeile für Zeile den Text ein und schließt mit ctrl-D oder mit einer Zeile, die nur einen Punkt enthält. Eine Korrekturmöglichkeit voriger Zeilen gibt es nicht.

Das Programm mail hat vor allem zwei Vorteile: es ist auf jeder UNIX-Maschine verfügbar und es stellt keinerlei Ansprüche an das Terminal. Ansonsten bietet sich Ersatz mit elm oder pine für Terminalumgebungen oder Netscape und die diversen Mailclients der Desktops. Gemeinsam ist ihnen, dass sie die Nachrichten aus der lokalen Mailbox in /var/spool/mail lesen und Mails in die Mailqueue abstellen.

Die Mailprogramme bieten zur Verwaltung der E-Mails oft eigene Ordner an, in denen die Post sortiert werden kann. Diese werden normalerweise im gleichen Format wie das Postfach abgelegt, allerdings in einer eigenen Datei in einem eigenen Verzeichnis. So verwendet elm das Verzeichnis ~/.elm oder der Netscape Messanger das Verzeichnis ~/nsmail.

POP3

RFC 1939

POP3 ist das aktuell gängige Protokoll, mit dem ein E-Mail Client seine Nachrichten beim Server abholt. Es ist in der RFC 1939 definiert. Im Prinzip arbeitet es fast wie ein ferngesteuertes lokale Mailprogramm. Es meldet sich über die in der /etc/passwd abgelegte Kennung an und liest das Postfach in /var/spool/mail aus.

Ideal für gemietete Leitungen

Dieses Verfahren ist ideal für Telefonanbindungen, bei denen die Dauer der Verbindung berechnet wird. Der Client zieht seine E-Mail vom Server herunter, löscht sie dort und schließt die Verbindung. Das dauert normalerweise nur wenige Minuten. Die Bearbeitung der Mail erfolgt offline auf dem Arbeitsrechner des Anwenders.

Konfiguration eines CLients

Einen POP3-Client zu konfigurieren ist verhältnismäßig einfach. Damit der POP3-Client weiß, wo er die Post abholen soll, braucht er den Namen (oder die IP-Nummer) des POP3-Servers und manchmal noch die Portnummer, die für POP3 standardmäßig 110 ist, wie man der /etc/services entnehmen kann. Ansonsten benötigt das Mailprogramm noch die Kennung und das Passwort auf der UNIX-Maschine. Der Client hat die Möglichkeit, nur die bisher ungelesenen Nachrichten abzuholen oder alle. Er kann nach dem Download die Nachrichten stehen lassen oder löschen.

Das POP3 definiert nicht, wie Nachrichten zu senden sind. Das Senden von Nachrichten wird üblicherweise über das SMTP abgewickelt.

POP3 Server

In einer reinen UNIX-Umgebung wird ein POP3-Server gar nicht gebraucht, da die E-Mails vom System per SMTP durchgeschoben werden. Darum gehört POP3 nicht zur Standardinstallation einer UNIX Maschine. Soll aber die Post durch andere Arbeitsplatzrechner gelesen werden, die selbst keinen SMTP Server anbieten, wie MS-Windows oder Mac, dann installiert man einen POP3-Server. Die Installation läuft normalerweise ohne weitere Konfiguration ab, da der POP3-Server die Authentifizierung ganz normal über die passwd-Datei laufen lassen kann. Die E-Mails können direkt dort abgeholt werden, wo sie der lokale Maildienst ablegt.

Protokoll per telnet

Wie die meisten Internetprotokolle basiert auch das POP3 auf dem Senden und Empfangen einfacher Zeilen. Man kann solche Protokolle mit Hilfe des telnet leicht anschaulich machen oder prüfen. Im Folgenden ist eine kleine Sitzung aufgesetzt. Sie besteht aus Anmeldung, Anzeige, wieviele E-Mails vorliegen, herunterladen einer E-Mail und Ende der Sitzung. Die eigenen Eingaben sind fett gedruckt.

gaston> telnet gaston 110
Trying 192.168.109.144...
Connected to gaston.
Escape character is '^]'.
+OK ready  <3745.1014213784@gaston.willemer.edu>
User andrea
+OK Password required for andrea.
pass daswerdeichhierauchgeradeimklartextschreiben
+OK andrea has 4 visible messages (0 hidden) in 44471 octets.
list
+OK 4 visible messages (44471 octets)
1 12980
2 4064
3 3673
4 23754
.
retr 1
+OK 12980 octets
Return-Path: <ems+HA564Q8DYULUE6@bounces.amazon.com>
Received: from localhost (localhost [127.0.0.1])
 ...
Mit vorzüglicher Selbstbeherrschung
Roswita Presswurst

. quit +OK Pop server at gaston.willemer.edu signing off. Connection closed by foreign host. gaston>

Eine Konversation

Die fettgedruckten Zeilen wurden als Kommandos in telnet direkt eingegeben. Normalerweise übermittelt sie der POP3-Client. Das erste Kommando User andrea meldet den Benutzer an. Die Benutzerkennung wird vom Server aus der /etc/passwd entnommen. Als nächstes wird das Passwort gesendet. Der Befehl pass leitet es ein. Der Server bestätigt mit OK die korrekte Anmeldung und gibt an, dass 4 Nachrichten anliegen, die zusammen 44471 Bytes2) belegen. Mit dem Befehl list erhält der Client eine Liste von 4 Nachrichten mit deren Größen. Der einzelne Punkt schließt die Liste ab. Der Befehl retr 1 holt die erste Nachricht. Sie erscheint im Klartext, beginnend mit dem Header und endet mit einem einzelnen Punkt. Schließlich wird die Sitzung durch das Kommando quit beendet.

IMAP (Internet Message Access Protocol)

IMAP4 ist definiert in RFC 1730, IMAP4r1 in RFC 2060.

Mehrere Clients

IMAP ist eine Neuentwicklung, die an einer Schwachstelle von POP3 einsetzt. Wenn der Anwender nicht nur einen Computer hat, sondern beispielsweise einen Arbeitsplatz in der Firma, einen Rechner zu Hause, von wo aus er hin und wieder arbeitet und dann noch einen Laptop, den er mitnimmt, wenn er zu Kunden fährt, dann verteilen sich die Nachrichten auf diese Rechner. Gerade in einem Intranet wie in einer Firma möchte man möglichst von jedem Arbeitsplatz aus schnell mal seine E-Mail einsehen können.

E-Mails bleiben auf dem Server.

Die Lösung für solche Situation ist naheliegend: man lässt die E-Mail auf dem Server. Hier setzt das Protokoll IMAP an. Nicht nur die Daten liegen zentral, sogar die Ordner, die sich Anwender normalerweise auf ihrem Client anlegen, um ihre Post zu sortieren, werden auf dem Server gehalten. Unter IMAP heißen diese Ordner Mailboxen. Da der Client die Daten niemals herunterladen muss, kann man von jedem Arbeitsplatz mit einem IMAP Mailclient die E-Mail bearbeiten. Man kann die Konsequenz auch weiter treiben, dass man eigentlich nicht einmal zwingend einen Mailclient braucht. Es reicht, wenn man eine Intranetanwendung hat, die man mit dem Webbrowser aufruft.

Vereinfachte Datensicherung

Für Firmen ergibt sich ein weiterer Vorteil bei der Frage der Datensicherung der Mails. Das ist natürlich ungleich einfacher, wenn die Daten zentral abgelegt werden, als wenn man noch die Postfächer auf den verschiendenen Arbeitsplätzen sichern muss.

Zwei Servervarianten

Es gibt zwei relevante Implementationen eines IMAP-Servers. Die erste stammt vom IMAP-Entwickler Mark Crispin von der Universtät Washington und wird als UW-Server bezeichnet. Die andere Implementierung ist von der Carnegie Mellon University und läuft unter dem Namen >>Projekt Cyrus<<. Der UW-Server braucht nach einer Installation auf einem UNIX-Rechner keine weitere Konfiguration, sofern sendmail als MTA (Mail Transport Agent) verwendet wird. Es gibt Aussagen, dass sich der UW-Server nicht mit dem Maildir-Format von Qmail verträgt.3) Der Cyrus-Server bietet die Möglichkeit, Mailquotas zu setzen. Diese Fähigkeit ist vor allem wichtig für Internetprovider, die einem Benutzer nicht erlauben können und wollen, dass ihre Mailbox beliebig groß wird. Dieser Vorteil wird durch einen größeren Installations- und Wartungsaufwand erkauft. So müssen die Mailboxen auf das Cyrus-System umgestellt werden und eine eigene Benutzerverwaltung aufgesetzt werden. Für Provider hat letztere den Vorteil, dass die /etc/passwd nicht mit reinen Mailbenutzern aufgebläht wird und dezentral verwaltet werden kann.

Diverse Clients

Inzwischen sind die meisten neueren Mailprogramme auch mit einer Unterstützung für IMAP ausgestattet. An plattformübergreifender Mailsoftware bietet sich der Netscape Messenger und das Mailprogramm von StarOffice an. Unter UNIX sind die terminalorientierten Programme mutt und pine mit IMAP ausgestattet. Unter X sind die neueren Mailprogramme, die beispielsweise mit den Desktops geliefert werden, wie etwa KMail (KDE) und Evolution (GNOME) verwendbar. Unter MS-Windows funktionieren fast alle Mailprogramme wie Pegasus, Outlook und Outlook Express. Für Mac ist ebenfalls der Netscape Messanger verfügbar, aber auch das weit verbreitete Eudora kommt mit IMAP zurecht. Dies sind nur Beispiele. Man kann feststellen, dass alle aktuell entwickelte Mailingsoftware neben POP3 auch IMAP beherrscht.

IMAP im Offline Modus

Für den Privatkunden im Internet ist der Online-Modus von IMAP nicht sinnvoll. Der Mailclient besitzt bei der Trennung der Leitung nämlich gerade mal die Header der E-Mails. Für das Lesen jeder E-Mail muss eine neue Verbindung zum Server hergestellt werden. Da dies bei einer Wählleitung praktisch kaum möglich ist, gibt es auch noch den Offline Modus, bei dem die Mails auf dem lokalen System gelagert werden.

Um den kompletten Mailverkehr eines Anwenders zu speichern, braucht man auf dem Server beträchtliche Kapazität. Das ist im Firmennetz kein Problem, da es fast egal ist, ob diese Daten auf dem lokalen Anwenderrechner liegen oder zentral abgelegt werden. Die zentrale Lagerung hat sogar den Vorteil, dass die Mail so leicht in die tägliche Datensicherung einbezogen werden kann. Für einen Provider ist es schon schwieriger, diese Datenmengen für jeden Kunden bereit zu stellen. Wenn einige Kunden dann auch noch mp3-Dateien oder Videodateien senden und empfangen, wird der Service schnell unbezahlbar. Einer der großen Freemaildienste im Web bietet einen IMAP-Dienst an. Er ist aber auf 8 MByte beschränkt. Der Umfang meiner E-Mail-Daten liegt inzwischen bei dem Zehnfachen und es sind keine der genannten Speicherfresser dabei.

Zusammenfassend kann man sagen, dass IMAP gegenüber POP3 eine bessere Lösung für das Intranet ist. Solange die meisten Internetnutzer keine Flatrate haben und solange der Speicher im Internet nicht großzügiger bemessen ist, wird POP3 hier sicher nicht so schnell abgelöst werden.

Post sammeln: fetchmail

Große Firmen haben einen eigenen Mailserver im Internet stehen, der ihre E-Mail per SMTP zugesandt bekommt. Dazu braucht man eine Standleitung zum Internet und eine feste Internetadresse. Für kleinere Firmen lohnt sich dieser Aufwand oft nicht. Immerhin erreicht man mit einem POP3 Postfach beinahe die gleiche Wirkung.

festchmail sammelt POP3 Postfächer ab

Die Lücke schließt das Programm fetchmail. Es holt bei Aufruf aus einer Liste von POP3-Postfächern die E-Mail ab und stellt sie in das lokale Mailsystem per SMTP ein. Dabei ist frei einstellbar, welches Postfach zu welchem lokalen Anwender gehört. Der Aufruf kann durch die crontab in regelmäßigen Abständen angestoßen werden oder beispielsweise jedesmal, wenn sowieso eine Verbindung zum Internet aufgemacht wird.

Konfiguration durch .fetchmailrc

Konfiguriert wird das Programm über die Datei .fetchmailrc des jeweiligen Benutzers. Sie muss im jeweiligen Heimatverzeichnis des Aufrufers stehen. Eine Zeile in dieser Datei hat folgenden Aufbau.

poll Server protocol POP3 user User password passwd is localUser

Leider muss hier das Passwort im Klartext stehen. Damit nicht jeder die Passwörter auslesen kann, muss die Datei mit chmod 710 .fetchmailrc für Fremde unlesbar gemacht werden.

Der folgende Aufruf klappert alle Mailserver ab und die E-Mails werden ins eigene Mailsystem gestellt.

fetchmail -k -L ~/fetchmail.log

Damit man die E-Mails auch in den lokalen Briefkästen landen, muss noch einmal sendmail -q durchgeführt werden.

Der Parameter -k sorgt dafür, dass die Mails nicht auf dem fernen POP3 Server nach dem Lesen gelöscht werden. Insbesondere in der Testphase ist das eine hilfreiche Option. fetchmail liest nur ungelesene Mails. Sollen alle gelesen werden, verwendet man -a. Die Option -L schreibt die Protokolle in die angegebene Datei hier fetchmail.log im Heimatverzeichnis.

Option Bedeutung
-k Mails auf POP3 Server nicht löschen
-a lese alle Mails, nicht nur die ungelesenen
-L Datei Protokolliere in Datei

Mailserver und Domain

Domäne

Eine E-Mail Adresse hat den Aufbau: Username@Domäne. An sich ist diese Adresse unvollständig, da auch der Computer benannt werden müsste, auf dem der Anwender seinen Briefkasten hat. Da aber normalerweise der Benutzer in einer Domäne bereits eindeutig gehalten wird, kann man die Angabe des Computers sparen, wenn die Domäne selbst festlegt, wie sie die Nachricht an den Benutzer weiterleitet. Die Adresse arnold@willemer.de besagt, dass der User arnold in der Domäne willemer.de gemeint ist. Die Domäne willemer.de hat einen Mailserver, der mittels DNS (Domain Name Service) festgelegt werden kann und der die E-Mail für die Domäne weiter verteilt.

In der Konfigurationsdatei des DNS-Servers, die die Namen auf die IP-Nummern umsetzt, gibt es eine Zeile mit dem Code MX. Diese bezeichnet den Mailserver. Hier der entsprechende Ausschnitt:

@       IN SOA    mail.willemer.edu.    root.mail.willemer.edu.
                  (
                   ......
                  )
;                 Wer sind die zustaendigen Mailserver
                  IN MX 10 mail.willemer.edu.

In diesem Beispiel ist der Computer namens mail für die Domäne willemer.edu zuständig. Die Zahl hinter MX ist die Priorität. Werden mehrere Server aufgelistet, wird zuerst derjenige mit der kleinsten Nummer ausgewählt. Erst wenn der nicht ansprechbar ist, wird die Post an denjenigen mit der nächstkleinsten Nummer gesendet. Dieser wird in regelmäßigen Abständen versuchen, die Mail an den primär zuständigen Mailserver weiterzugeben, auf dem die Anwender ihre Mail abholen.

Erstes Beispiel: Interne Firmenmail

sendmail verteilt interne Post

Soll nur eine einfache Möglichkeit erstellt werden, innerhalb einer Firma E-Mails auszutauschen, kann man leicht auf einem ausgedienten PC Linux installieren. Anschliessend wird für jeden Mitarbeiter ein Benutzerkonto eingerichtet. Die lokale E-Mail-Verteilung zwischen den Usern läuft bei jeder Distribution. Gegebenenfalls ist zu kontrollieren, wie häufig der Austausch der Mail abläuft. Dies kann man am Parameter -q des sendmail festmachen.

Zeittakt

Die Option -q ohne weitere Argumente führt die Mailverteilung genau einmal aus. Wird dagegen eine Zeitangabe mitgegeben, geht sendmail in den Hintergrund und wird in dem angegebenen Intervall aktiv. Durch die Buchstaben h (Stunden), m (Minuten) und s (Sekunden) wird die Zeit angegeben. Beispielsweise bedeutet -q 1h30m, dass sendmail alle anderthalb Stunden die Verteilung vornimmt.

IMAP oder POP3

Was nun noch gebraucht wird, ist ein POP3- oder IMAP-Server. Beides wird bei den Distributionen normalerweise mitgeliefert, aber nicht installiert. Man braucht hier nicht zu konfigurieren, die Standardinstallation reicht. Damit ist der Server bereits fertig.

Blick auf den Client

Im Netz muss gewährleistet sein, dass jeder Arbeitsplatz den Mailserver erreichen kann. Auf den Clients muss TCP/IP installiert sein und es wird ein POP3-kom­pati­b­ler E-Mail-Client benötigt. Da POP3 von fast jedem E-Mail-Client bedient wird, ist die Auswahl riesig. Bei IMAP muss man etwas genauer hinsehen, aber die Chance, dass der Client auch diesen Standard beherrscht, ist groß. Der Client braucht nur wenige Parameter. Zunächst benötigt er den Namen oder die IP-Nummer des Mailservers. Dann den Benutzernamen und das Passwort, mit dem sich der Benutzer auf dem Mailserver einloggen kann. Zuletzt wird eingestellt, in welchem Intervall die Clients den Server nach neu eingetroffener Mail abfragen sollen.

Diese Lösung ist recht einfach installiert und extrem billig. Sie hat natürlich den Nachteil, dass der Mailserver ständig abgefragt wird und dass die E-Mail nicht sekundengenau beim Empfänger auf dem Schreibtisch liegt.

Zweites Beispiel: Anbindung an das Internet

Das Ziel dieser Beispielkonfiguration ist eine E-Mail Anbindung ans Internet für eine Linux-Workstation mit mehreren Benutzern. Dabei sollte die E-Mail für alle Benutzer der Maschine zentral geholt und versandt werden. Als Distribution wurde S.u.S.E. 7.0 verwendet. Der Provider ist T-Online. Es dürfte aber mit jeder anderen Distribution und jedem anderen Provider ähnlich funktionieren.

SMTP per sendmail

Der erste Schritt ist es, einen funktionierenden sendmail zu installieren. Dazu wird sendmail so vorkonfiguriert, dass ein SMTP verfügbar ist. Normalerweise dürfte das bei heutigen Systemen die Standardkonfiguration sein. Anschließend wird die /etc/sendmail.cf an einigen Stellen angepasst. In der sendmail.cf werden die Stichworte DeliveryMode, ^DS und ^DM gesucht (Das Dach vor dem D bewirkt, dass diese Buchstaben am Anfang der Zeile stehen müssen).

O DeliveryMode=deferred
# ...
DSsmtprelay.t-online.de
# ...
DMwillemer.de

DeliveryMode=deferred erreicht, dass Nachrichten nur noch versandt werden, wenn sendmail -q aufgerufen wird.

DS beschreibt den Mailserver, an den abgehende Mails versandt werden. In diesem Fall wurde der Server smtprelay von T-Online verwendet. Dieser erlaubt, dass ich meine eigene Domain als Absender verwenden kann.

DM bestimmt Absenderadresse

Hinter DM steht die Absendeadresse. Dies kann eine komplette Adresse wie anton@foo.de sein oder eine Domäne wie willemer.de, die dann einfach an den Nutzernamen angehängt wird. So habe ich ein Account arnold auf dem Linuxsystem. Beim Senden macht sendmail daraus den Absender arnold@willemer.de. Da alle anderen Nutzer auf dem Gerät ebenfalls eine @willemer.de-Adresse haben, vereinfacht sich die Installation entsprechend.

sendmail-Start konfigurieren

Der Startaufruf von sendmail bei Starten des Systems befindet sich in der Datei sendmail in dem Verzeichnis, indem sich die rc-Dateien des Systems befinden. Dort sollten die Attribute des Aufrufs von sendmail auf -bd -om eingestellt werden. Die Option -bd bewirkt das Arbeiten des sendmail im Hintergrund auf Port 25 unter dem SMTP. Vor allem wurde hier die Option -q30m entfernt, die ansonsten sendmail alle 30 Minuten aktiviert hätte.

Test

Zum Test wird mit elm oder mail eine E-Mail an eine eigene Internetadresse geschrieben. Mit mailq sollte die Nachricht anschließend sichtbar sein. Jetzt wird die Verbindung geöffnet und mit sendmail -q das Senden angestoßen. Besitzt der Provider einen Webmailer kann man schnell mit einem Browser prüfen, ob die Mail einwandfrei versendet wurde.

E-Mail einsammeln (fetchmail)

Mit dem Programm fetchmail werden drei Mailserver ausgelesen und die dort gefundenen Nachrichten ins lokale E-Mailsystem per SMTP eingespeist. Konfiguriert wird das Programm über die Datei ~/.fetchmailrc des Benutzers root. Darin stehen Einträge wie diese:

poll pop.foo.de protocol POP3 user arnold password aBc is arnold
poll pop3.mail.de protocol POP3 user wili password 2ef is arnold
poll pop.fake.de protocol POP3 user fake password PaSw is andrea

Anschließend sollte der folgende Aufruf alle Mailserver abklappern und die E-Mails ins eigene Mailsystem stellen.

fetchmail -L /var/log/fetchmail

Die E-Mails werden nach dem nächsten Aufruf von sendmail -q in die lokalen Briefkästen verteilt

Automatisieren bei Internetverbindung

Bei jedem Aufbau einer Wählverbindung in das Internet wird der Skript /etc/ppp/ip-up aufgerufen. Man kann an das Ende einfach folgende Befehle anhängen und es werden bei jedem Verbindungsaufbau die E-Mails zwischen lokalem System und Internet getauscht.

echo "Post holen..." >/dev/xconsole
fetchmail  >/dev/xconsole
echo "Post senden..." >/dev/xconsole
sendmail -q


1 Als Administrator einer Mehrbenutzeranlage sollten Sie sich den Auftrag, eine Mail zu löschen, schriftlich geben lassen.
2 Von der furchtbaren Angst gequält, das Byte könnte eines Tages nicht mehr 8 Bit haben, wird von einigen fleißigen Lateinschülern der Begriff Oktett präferiert. Wie wir alle wissen, leitet sich aber der lateinische Begriff vom dänischen Wort otte für 8 her. Insgesamt ist also immer noch das gemeint, was der einfache Feld-, Wald-, Wieseninformatiker als Byte bezeichnet.
3 vgl. Mullet/Mullet: Mailmanagement mit IMAP. O'Reilly, 2001. S. 255.

Diese Seite basiert auf Inhalten aus dem Buch Arnold Willemer: Wie werde ich UNIX-Guru?