Dr. Andreas Borchert Abteilung Angewandte Informationsverarbeitung 1. Juli 2003
Christian Ehrhardt Blatt 9


Uni Logo



Systemnahe Software (SS 2003)


Abgabetermin 8.7.2003

Mails

In diesem Blatt soll ein Programm geschrieben werden, mit dem eine Mail an alle Teilnehmer der eigenen Tutoriumsgruppe geschickt werden kann.

Verbindung

Dazu ist es notwendig, sich mit dem Mailserver zu unterhalten. In späteren Blättern wird das direkt über Sockets funktionieren, für dieses Blatt beauftragen wir das Programm nc (auf manchen Systemen auch netcat) mit der Verbindungsaufnahme. nc bekommt zwei Argumente, den Namen des Rechners, auf dem der Server läuft und den zu verwendenden Port. Für dieses Blatt kann als Servername theseus.mathematik.uni-ulm.de verwendet werden. Der Port für Mail ist 25.
Wenn man nc mit diesen Parametern aufruft, dann schickt nc seine Standardeingabe an den Mailserver weiter und die Antworten des Mailservers erscheinen auf der Standardausgabe. Auf diese Weise ist es also (mit Hilfe von pipes) für ein Programm möglich, sich mit dem Mailserver zu unterhalten.

Unterhalten mit dem Mailserver

Prinzipiell läuft die Unterhaltung mit dem Mailserver Zeilenorientiert ab. Jede Zeile muß durch die Zeichenfolge $\backslash$r$\backslash$n abgeschlossen werden. Es ist Aufgabe Eures Programms das sicherzustellen, selbst dann, wenn eine eingegebene Zeile nur mit $\backslash$n beendet wurde.
Die Unterhaltung mit dem Mailserver beginnt damit, daß der Mailserver eine Begrüßung verschickt. Diese Begrüßung ist genauso aufgebaut, wie die Antwort auf ein Kommando (siehe unten). Anschließend läuft die Kommunikation so ab, daß der Client ein Kommando sendet. Der Server beantwortet dieses Kommando mit einer Antwort. Je nach Kommando und Antwort kann es außerdem noch sein, daß der Server oder der Client nach der Antwort zusätzliche Daten verschickt.

Wichtige Kommandos

Ein Kommando besteht immer aus einem oder mehreren Worten (unten fett gedruckt). Manche Kommandos haben auch Argumente, die durch Leerzeichen getrennt hinter dem Kommando kommen (unten kursiv gedruckt). Beendet wird das Kommando durch $\backslash$r $\backslash$n.

Diese Kommandos sollten in der Regel in dieser Reihenfolge vom Client geschickt werden. Einzige Ausnahme: QUIT kann immer geschickt werden. Wenn QUIT vorzeitig verschickt wird, wird die Verbindung beendet ohne daß die Mail verschickt wird.

Antworten des Servers

Die Antwort des Servers besteht immer aus einer Zeile. Diese Zeile wiederum besteht aus drei Ziffern gefolgt von einem kurzen Text. Die Ziffern geben an, ob das Kommando erfolgreich war oder was für ein Fehler aufgetreten sein könnte. Der Text beschreibt die Antwort in einer für Menschen verständlichen Form. Für dieses Blatt ist nur die erste Ziffer des Antwortcodes interessant. Folgende Klassen von Antwortcodes gibt es:

In der Regel wird der Server nur ganz zu Beginn und nach einem Kommando eine solche Antwort schicken (siehe aber das DATA Kommando). Zusätzlich sind manche 5xy und 4xy Antworten auch ohne ein Kommando (zum Beispiel mitten während dem Senden des Mailinhalts) möglich.

Der Inhalt einer Mail

Eine Mail besteht aus zwei Teilen, dem sogenannten Header und dem eigentlichen Text. Der Header wird durch eine leere Zeile beendet. Der Header einer von Euch verschickten Mail sollte mindestens die folgenden Zeilen enthalten (fettgedruckter Text ist wörtlich zu nehmen, kursiver Text beschreibt durch was der Text ersetzt werden soll): Zu beachten ist, daß die Einträge in den From:- und To:-Zeilen nicht unbedingt etwas mit den beim MAIL From: und RCPT To: Kommando angegebenen Adressen zu tun haben müssen. Es ist Aufgabe Eures Programms sicherzustellen, daß die Mail diese Headerzeilen enthält und daß Ihr Inhalt richtig ist.

Zusammenfassung

Euer Programm soll den Text einer Mail von der Standardeingabe einlesen und diesen Text als Mail mit Header an sämtliche Mitglieder der eigenen Tutoriumsgruppe verschicken. Dazu wird eine Verbindung mit dem Mailserver aufgebaut. Euer Programm ist dafür zuständig, sich mit dem Mailserver zu unterhalten, einen richtigen Header einzufügen und eventuell ein $\backslash$r am Zeilenende hinzuzufügen, wenn die Zeile durch ein alleinstehendes $\backslash$n beendet wird. Außerdem soll das Programm die Antwortcodes des Server überprüfen und zum Schluß angeben, ob die Mail wirklich erfolgreich beim Server abgeliefert wurde.

Hinweise



Christian Ehrhardt 2003-07-01