Inhalt

3. Wie E-Mail funktioniert

Jetzt werden wir den Informationsfluß beschreiben, der üblicherweise stattfindet, wenn zwei Personen per E-Mail kommunizieren. Unterstellen wir, daß Alice von ihrem Computer wunderland.com eine E-Mail an Bob auf seinen Computer dobbs.com schicken will. Beide Maschinen sind mit dem Internet verbunden.

Hilfreich zu wissen ist dabei, daß eine Internet E-Mail Nachricht aus zwei Teilen besteht: dem E-Mail Header und dem E-Mail Body, geteilt durch eine leere Zeile. Die E-Mail Header enthalten die Quelle und das Ziel der E-Mail, eine benutzerbestimmte Subjekt Zeile, das Sendedatum und verschiedene anderen Arten von nützlichen Informationen. Der Body ist der aktuelle Inhalt der Nachricht. Hier ein Beispiel:

From: "Alice" <alice@wonderland.com>
Message-Id: <199711131704.MAA18447@wonderland.com>
Subject: Hast du mein weißes Kaninchen gesehen?
To: bob@dobbs.org (Bob)
Date: Thu, 13 Nov 1997 12:04:05 -0500 (EST)
Content-Type: text


--
                                                >>alice>>

Die Anordnung und die Bedeutung der Internet E-Mail Header sind durch einen Internet Standard, genannt RFC 822, definiert.

3.1 E-Mail zwischen Vollzeit Internet Maschinen

Hier ist ein Diagramm des gesamten Vorgangs - die Etappen und die Terminologie werde ich unten erläutern.

                   +---------+          +-------+
+-------+  tippt   | sendet  | ruft auf |sendet |
| Alice |--------->|   MUA   |--------->|  MTA  |::::>::::
+-------+          |         |          |       |       ::   auf der
                   +---------+          +-------+       ::   sendenden
                                                        ::   Maschine
.......................................................................
                             SMTP                       ::
 ::::::::::::::::::::::::::::<::::::::::::::::::::::::::::
 ::
 ::   +---------+          +-----+                +-------+
 ::   |empfängt |ruft auf  |     | stellt zu an   | Bobs  |
 ::::>|   MTA   |--------->| LDA |===============>|Mailbox|  auf der
      |         |          |     |                |       |  empfangenden
      +---------+          +-----+                +-------+  Maschine
                                                    |   |
                                                    |   |
                     +----------------<-------------+   |
                     |                                  |
                +----------------+  +-------+           |
                |     Bobs       |  | Bobs  |<----------+
                |Benachrichtigung|  |  MUA  |
                +----------------+  +-------+
                     |                  |
                     |      +-----+     |
                     +----->| Bob |<----+
                            +-----+

Um eine E-Mail zu schicken, wird Alice ein Programm aufrufen, den »E-Mail User Agent« (oder »Mail User Agent«, Abkürzung: MUA). Der MUA ist das, was die Benutzer oft als »das E-Mail Programm« ansehen; es unterstützt Sie bei der Erstellung der Nachricht, gewöhnlich durch den Aufruf eines Texteditors eigener Wahl. Wenn Sie den »Senden« Button drücken, ist Ihr Teil der Arbeit getan. Später in dieser HOWTO werden wir einen Überblick über populäre MUAs geben.

Der MUA, den Sie benutzen, übergibt ihre Nachricht sofort an ein Programm, das »E-Mail Transport Agent« (oder »Mail Transport Agent«, Abkürzung: MTA) genannt wird. Dieses Programm wird normalerweise sendmail sein, obwohl noch einige alternative MTAs an Popularität gewonnen haben und in zukünftigen Linux Distributionen auftauchen werden. Später in dieser HOWTO werden wir auch über die MTAs einen Überblick geben.

Die Aufgabe des MTA ist die Übertragung der E-Mail an den MTA auf Bobs Maschine. Es ermittelt Bobs Maschine durch die Analyse des »To: «-Header und entdeckt das dobbs.com auf der rechten Seite von Bobs Adresse. Es benutzt diese Adresse, um eine Internet Verbindung zu Bobs Maschine zu öffnen. Die Mechanismen der Erstellung dieser Verbindung sind aber eine ganz andere Sache; für diese Erläuterung reicht es zu wissen, daß diese Verbindung für den MTA von Alice ein Weg ist, Textbefehle an Bobs Maschine zu senden und Antworten auf diese Befehle zu empfangen.

Die Befehle des MTA gehen nicht an eine Shell. Statt dessen gehen sie an einen Sevice Port auf Alices Maschine. Ein Service Port ist eine Art Treffpunkt, ein bekannter Platz, an dem Internet Service Programme auf eintreffende Anfragen lauschen. Service Ports sind nummeriert und Alices MTA weiß, daß es mit Port 25 auf Bobs Maschine kommunizieren muß, damit die E-Mail durchgelassen wird.

An Port 25 hat Bobs Maschine einen eigenen MTA, der auf Befehle lauscht (womöglich eine weitere Kopie von sendmail). Alices MTA arbeitet einen Dialog mit dem MTA vom Bob ab, indem es das Simple Mail Transport Protocol (einfaches E-Mail Protokoll, Abkürzung: SMTP) benutzt. So sieht ein SMTP Dialog aus. Zeilen, die von Alice's Maschine gesendet werden, sind mit einem »S:« markiert, Antworten von Bobs Maschine zeigen ein »R:«.

S: MAIL FROM:<alice@wunderland.com>
R: 250 OK
S: RCPT TO:<bob@dobbs.com>
R: 250 OK
S: DATA
R: 354 Start mail input; end with <CRLF>.<CRLF>
S: From: "Alice" <alice@wunderland.com>
S: Message-Id: <199711131704.MAA18447@wunderland.com>
S: Subject: Hast du mein weißes Kaninchen gesehen?
S: To: bob@dobbs.org (Bob)
S: Date: Thu, 13 Nov 1997 12:04:05 -0500 (EST)
S: Content-Type: text
S:
S: Ich bin beunruhigt. Ich befürchte, er könnte ich ein Loch gefallen
 sein.
S: --
S:                                                 >>alice>>
S: .
R: 250 OK

Gewöhnlich besteht ein SMTP Befehl aus einer einzigen Textzeile und ebenso seine Antwort. Der »DATA« Befehl ist eine Ausnahme; nachdem dieser erkannt wurde, akzeptiert der SMTP Listener Nachrichtenzeilen bis ein Punkt für sich allein in einer Zeile steht. SMTP wird durch den Internet Standard RFC 821 definiert.

Jetzt hat Bobs MTA die Nachricht von Alice. Er fügt einen Kopf an die Nachricht, der so oder ähnlich aussieht:

Received: (from alice@wonderland.com)
        by mail.dobbs.com (8.8.5/8.8.5) id MAA18447
        for bob@dobbs.com; Thu, 13 Nov 2001 12:04:05 -0500

Das geschieht für Zwecke der Zurückverfolgung, für den Fall von E-Mail Fehlern (manchmal muß eine Nachricht durch mehr als eine Maschine übertragen werden und wird mehrere davon haben). Bobs MTA übergibt die veränderte Nachricht an einen »Local Delivery Agent« (lokaler E-Mail Zusteller, Abkürzung: LDA). Auf Linux Systemen ist der LDA gewöhnlich ein Programm namens procmail, obwohl es auch andere gibt.

Die Aufgabe des LDA ist es, die Nachricht an Bobs Mailbox anzuhängen. Er ist vom MTA getrennt, so daß beide Programme einfacher gehalten sein können und der MTA sich darauf konzentrieren kann, seine »Internet-Dinge« zu tun, ohne sich um lokale Details zu kümmern, etwa wo die Mailboxen des Benutzers sind.

Bobs Mailbox wird normalerweise eine Datei namens /usr/spool/mail/bob oder /var/mail/bob sein. Wenn er seine E-Mails liest, startet er seinen eigenen MUA, um in diese Datei zu sehen und sie zu editieren.

3.2 Benachrichtigung

Es gibt noch eine weitere Programmart, die in der E-Mail Kette wichtig ist, obwohl diese selbst weder E-Mails liest noch übermittelt. Es ist ein »Mail Notifier«, ein Programm, das Ihren E-Mail Eingangskorb auf Aktivität überwacht und Ihnen signalisiert, wenn eine neue E-Mail ankommt.

Die ursprüngliche Benachrichtigung fand durch ein Paar von Unix Programmen, genannt biff(1) und comsat(8), statt. Das Programm biff ist ein Frontend oder eine Bedienoberfläche, welche Ihnen erlaubt, den comsat Dienst einzuschalten. Wenn dieser Service aktiviert ist, wird der Kopf einer neuen Nachricht an Ihr Terminal ausgegeben, sobald sie eintrifft. Diese Möglichkeit war für Leute gedacht, die zeilenorientierte Programme auf Textkonsolen nutzen; in heutigen Umgebungen ist es keine wirklich gute Idee.

Die meisten Unix Shells haben eine eingebaute Prüfungsmöglichkeit für E-Mails, die es ihnen erlaubt, eine Benachrichtigung in viel weniger aufdringlicher Art und Weise durchzuführen (durch Ausgabe einer Nachricht direkt vor dem Prompt, wenn neue E-Mails entdeckt werden). Typischerweise können Sie dies durch das Setzen von Umgebungsvariablen einschalten, die auf der Manual Page der Shell dokumentiert sind. Für Shells der sh/ksh/bash Familie sehen Sie unter den Variablen »MAIL« und »MAILPATH« nach.

Systeme mit X11 Unterstützung haben eines von mehreren kleinen Desktop Tools, die regelmäßig nach neuen E-Mails sehen und Ihnen sowohl optisch als auch akustisch anzeigen, wenn es neue E-Mails gibt. Das älteste und am häufigsten verwendetste dieser Tools ist xbiff. Falls Ihr Linux ein vorkonfiguriertes X-Desktop Setup hat, ist xbiff vermutlich installiert. Sehen Sie in der xbiff(1) Manual Page nach Details.

3.3 E-Mail an zeitweise internetverbundene Maschinen senden

Falls Sie aufmerksam gelesen haben, wird Ihnen aufgefallen sein, daß der von uns beschriebene Informationsfluß davon abhängt, daß Alices Computer sofort mit Bobs Computer kommunizieren kann. Was passiert, wenn Bobs Computer abgeschaltet ist oder eingeschaltet ist, aber keine Internetverbindung besteht?

Falls der MTA von Alice den von Bob nicht sofort erreichen kann, wird Alices Nachricht in einer E-Mail Warteschlange auf wunderland.com abgelegt. Er wird dann in regelmäßigen Abständen versuchen, die Nachricht erneut zu versenden, bis eine Ablaufzeit erreicht ist; an diesem Punkt wird Alice durch eine Rückmeldung von dem Mißerfolg informiert. In der Grundeinstellung des am meisten verbreitetsten MTA (sendmail) beträgt die Zeit erneuter Versuche 15 Minuten und der Ablaufzeitraum 4 Tage.

3.4 Ferne E-Mail und Fern-E-Mail Protokolle

Viele Linux Nutzer sind heutzutage über ISPs (Internet Service Provider) mit dem Internet verbunden und haben keine eigene Internetdomain. Statt dessen haben sie Benutzerkonten auf einer ISP Maschine. Ihre E-Mails werden an eine Mailbox auf diesem ISP Computer zugestellt. Aber üblicherweise wollen diese Benutzer ihre E-Mails mit ihren eigenen Computern lesen und beantworten, die zeitweise mit dem ISP verbunden sind, unter Benutzung von SLIP oder PPP. Linux unterstützt dafür Fern-E-Mail Protokolle.

Beachten Sie den Unterschied zu dem Szenario, das wir im letzten Abschnitt besprochen haben. E-Mails, die in einer Warteschlange sitzen und eine erneute Übertragung abwarten, sind nicht das selbe wie E-Mails, die an eine Server Mailbox gesendet werden. E-Mails in einer Warteschlange können nicht als versendet angesehen werden und unterliegen der Verfallzeit. Dagegen sind an eine ISP Mailbox verschickte E-Mails als »ausgeliefert« anzusehen und können dort auf unbestimmte Zeit bleiben.

Ein Fern-E-Mail Protokoll erlaubt, daß E-Mails von einem Server über eine Netzwerkverbindung durch ein Client-Programm gezogen werden (das ist das Gegenstück der normalen Auslieferung, wobei ein MTA die E-Mails an den empfangenden MTA schickt). Es gibt zwei gebräuchliche Fern-E-Mail Protokolle: POP3 (wird durch den Internet-Standard RFC 1939 definiert) und IMAP (wird durch den Internet-Standard RFC 2060 definiert). Tatsächlich unterstützen alle ISPs POP3, eine steigende Zahl unterstützt IMAP, welches mächtiger ist.

Es folgt ein Beispiel, wie eine POP3 Sitzung aussieht:

S: <client connects to service port 110>
R:    +OK POP3 server ready <1896.697170952@mailgate.dobbs.org>
S:    USER bob
R:    +OK bob
S:    PASS redqueen
R:    +OK bob's maildrop has 2 messages (320 octets)
S:    STAT
R:    +OK 2 320
S:    LIST
R:    +OK 2 messages (320 octets)
R:    1 120
R:    2 200
R:    .
S:    RETR 1
R:    +OK 120 octets
R:    <the POP3 server sends message 1>
R:    .
S:    DELE 1
R:    +OK message 1 deleted
S:    RETR 2
R:    +OK 200 octets
R:    <the POP3 server sends message 2>
R:    .
S:    DELE 2
R:    +OK message 2 deleted
S:    QUIT
R:    +OK dewey POP3 server signing off (maildrop empty)
S:  <client hangs up>

Eine IMAP Sitzung verwendet davon verschiedene Befehle und Antworten, aber es ist von der Logik her recht ähnlich.

Um die Vorteile von POP3 oder IMAP zu genießen, benötigen Sie ein E-Mail Client Programm, um die E-Mails zu erhalten. Einige MUA haben Client-Fähigkeiten eingebaut (welche unterstützt werden, ist unten aufgelistet). Die E-Mail Fähigkeit des Netscape Browsers unterstützt sowohl POP als auch IMAP von Hause aus.

Der Hauptnachteil von POP Clients, die in MUAs eingebaut sind, ist, daß man dem Mailprogramm explizit befehlen muß, den Server anzuwählen; man wird nicht von xbiff(1) oder ähnlichem benachrichtigt, ebensowenig wie für E-Mails, die entweder lokal oder durch eine konventionelle SMTP »push«-Verbindung ausgeliefert werden. Außerdem sind natürlich nicht alle MUAs POP/IMAP-fähig, so daß Sie für sich selbst wegen anderer Features Kompromisse finden können.

Ihr Linux kommt wahrscheinlich mit einem Programm genannt fetchmail, das speziell dafür geschaffen wurde, um mit entfernten E-Mail Servern zu kommunizieren, E-Mails abzuholen und diese in Ihren Standard E-Mail Zustellpfad zuzustellen, indem es über SMTP mit Ihrem »listener« spricht. fetchmail ist unter folgender Adresse zu finden:

http://www.tuxedo.org/~esr/fetchmail/

Bis auf die Fälle, in denen die E-Mails auf dem Server verbleiben sollen, weil z.B. mehrere Rechner zum Lesen der E-Mails verwendet werden, ist fetchmail möglicherweise eine bessere Lösung als die POP/IMAP Funktionen, die Ihr E-Mail Programm bietet. fetchmail kann aufgefordert werden, im Hintergrund zu laufen und periodisch auf den Server zuzugreifen, so daß xbiff(1) oder ein anderes E-Mail Benachrichtigungprogramm wie für SMTP E-Mails arbeiten können. Zudem ist fetchmail weit nachsichtiger gegenüber verschiedenen Eigenheiten und nicht standardisierten Server Launen als die Clients in MUAs und hat eine bessere Fehlerkorrektur.

Das Diagramm zeigt, wie beide Fälle (mit und ohne fetchmail) arbeiten:

                   +---------+          +---------+
+-------+  tippt   |sendender| ruft auf |sendenden|
| Alice |--------->|   MUA   |--------->|   MTA   |::>::::
+-------+          |         |          |         |     ::
                   +---------+          +---------+     ::   auf der
                                                        ::   sendenden
                             SMTP                       ::   Maschine
 ::::::::::::::::::::::::::::<::::::::::::::::::::::::::::
 ::
.::.......................................................................
 ::
 ::   +------------+        +-----+             +-------+
 ::   |empfangender|ruft auf|     | stellt zu   | Bobs  |
 ::::>|     MTA    |------->| LDA |============>|Server |:::>::::
      |            |        |     |    an       |Mailbox|      ::  auf dem
      +------------+        +-----+             +-------+      ::   Mail
                                                               ::  Server
                          POP oder IMAP                        ::
 ::::::::::::::::::::::::::::<:::::::::::::::::::::::::::::::::::
 ::
.::.......................................................................
.
 ::
 ::                  +-----------+
 ::                  |           |
 :::::::>::::::::::::| fetchmail |::::::::               auf der
 ::                  |           |      ::              empfangenden
 ::                  +-----------+      ::               Maschine,
 ::                                     ::             mit fetchmail
 ::   ::::::::::::::::<:::::::::::::::::::
 ::   ::
 ::   ::   +------------+          +-----+                +-------+
 ::   ::   |empfangender| ruft auf |     | stellt zu an   | Bobs  |
 ::   ::::>|     MTA    |--------->| LDA |===============>|Mailbox|
 ::        |            |          |     |                |       |
 ::        +------------+          +-----+                +-------+
 ::                                                         |   |
 ::                                                         |   |
 ::                       +----------------<----------------+   |
 ::                       |                                     |
 ::                  +---------------+   +-------+              |
 ::                  |  Bobs         |   | Bobs  |<-------------+
 ::                  |  Notifier     |   |  MUA  |
 ::                  +---------------+   +-------+
 ::                       |                  |
.::.......................................................................
.
 ::                   .   |                  |
 ::     ohne          .   |                  |
 ::    fetchmail      .   |                  |
 ::                   .   |      +-----+     |
 ::   +----------+    .   +----->|     |<----+
 ::   |  Bobs    |    .          | Bob |
 :::::| POP/IMAP |----.--------->|     |
      |   MUA    |    .          +-----+
      +----------+    .

3.5 Mailbox Formate

Wenn eingehende E-Mails an eine Mailbox angefügt werden, obliegt es dem MTA, einige Arten von Begrenzungszeichen anzubieten, die mitteilen, wo eine Nachricht endet und die nächste beginnt.

Unter Unix nutzen nahezu alle E-Mail Programme die Konvention, daß in jede Zeile, die mit einem »From « beginnt (das Leerzeichen ist entscheidend), eine neue Nachricht anfängt. Wenn »From « am Beginn einer Zeile im Text erscheint, wird ein UNIX MTA sie normalerweise mit einem »größer-als« Zeichen signieren, so daß sie dann so aussieht: »>From «. RFC 822 Header folgen dieser »From« Zeile (welche gewöhnlich den Namen des Sendenden und das Empfangsdatum enthält).

Diese Konvention entstammt der Unix Version 7, weshalb diese Art Mailbox als »V7 Mailbox« bezeichnet wird; manchmal heißt es auch »mbox Format«. Soweit nicht anders vermerkt, erwarten alle in dieser HOWTO erwähnten Programme dieses Format. Es ist nicht direkt universell, und Hilfsprogramme erwarten und erstellen verschieden Formate, so daß sie sich gegenseitig sehr verwirren können.

Die vier anderen Formate, die bekannt sein sollten und vor denen man sich hüten sollte, sind BABYL, MMDF, MH und qmail maildir (E-Mail Verzeichnisse von qmail). Von diesen ist MMDF das einfachste. Es verwendet eine Begrenzungslinie, die aus vier Control-As (ASCII 001) gefolgt von einem Zeilenumbruch (CR-LF) besteht. MMDF war ein früher und recht primitiver Internet E-Mail Transport. Ein Nachfolger ist immer noch auf SCO Systemen in Benutzung.

BABYL ist ein weiteres Überbleibsel eines frühen E-Mail Systems des MIT (Massachusetts Institute of Technology). Es wird immer noch von emacs im E-Mail Lesemodus verwendet.

MH und qmail maildir sind »Mailbox« Formate, die jede Mailbox in ein Verzeichnis aus Dateien stürzen, eine pro Nachricht. Wenn grep auf so eine »Mailbox« angewendet wird, erhält man nichts, da alles, was grep zu sehen bekommt, Verzeichnisbits sind.

Microsoft Outlock Express .mbx Mailboxen können in ein RFC 822 Format mittels des Programms mbx2mbox umgewandelt werden.


Inhalt