Mailhandling unter Linux

Unter Windows werden Mails normalerweise vom Mailclient abgeholt und auch wieder verschickt.

Obwohl diese Methode mit Programmen wie dem Netscape Communicator auch unter Linux funktioniert, ist hier eine andere Vorgehensweise üblich, die größeren Komfort bietet und sich darüber hinaus auch für den Multiuser-Betrieb eignet. Unabhängig von den Features eines bestimmten Mailreaders können mehrere POP3-Accounts gleichzeitig geleert und Benutzern lokal zugestellt werden.

Der Ablauf ist allerdings ein wenig komplizierter, weil mehrere Programme beteiligt sind:

Eine Mail wird durch fetchmail vom POP3-Account abgeholt und an den lokalen Mailserver (sendmail, exim o. ä.) weitergereicht. Dieser übergibt die Post dann an procmail, das einige Filterfunktionen durchführt und die Mail je nach voreingestellter Regel in einer lokalen Mailbox abspeichert. Dann kann sie von einem Mail-Programm wie mutt gelesen werden.

Eine ausgehende Mail wird vom Mail-Programm an den lokalen Server übergeben, der sie bei bestehender Internet-Verbindung an den SMTP-Server des Internet-Providers weiterleitet.

Bevor Du mit der Konfiguration beginnen kannst, benötigst Du einige Angaben über Deine Mail-Accounts und die Deiner Mitbenutzer (falls vorhanden). Hier ist ein Beispiel:


+---------------+--------------------------+------------------------------+ 
| Mail-Adresse: |  skywalker@tatooine.net  |  princess.leia@alderaan.net  | 
+---------------+--------------------------+------------------------------+ 
| Account:      |  skywalker               |  2345123                     | 
| Paßwort:      |  yoda                    |  obi-wan                     | 
| POP3-Server:  |  pop.tatooine.net        |  pobox.alderaan.net          | 
| SMTP-Server:  |  mail.tatooine.net       |  mailout.alderaan.net        | 
+---------------+--------------------------+------------------------------+ 
| Lokaler User: |  luke                    |  leia                        | 
+---------------+--------------------------+------------------------------+ 

Der Maileingang

fetchmail

Der erste Schritt ist das Abholen der Mails von einem POP3-Server. Hier kommt fetchmail, ein sehr mächtiges und ausführlich dokumentiertes Programm, zum Einsatz. Für den Anfang benötigst Du jedoch nur einen kleinen Teil seiner Fähigkeiten.

In der Konfigurationsdatei /etc/fetchmailrc trägst Du - natürlich an Deine Daten angepaßt - folgendes ein:

# Mail für Luke abholen 
poll pop.tatooine.net protocol pop3 user "skywalker" there with password "yoda" is luke here 
 
# Mail für Leia abholen 
poll pobox.alderaan.net protocol pop3 user "2345123" there with password "obi-wan" is leia here 

Der erste Eintrag bewirkt, daß vom POP3-Server "pop.tatooine.net" alle Mails des Accounts "skywalker" abgeholt werden. Das Paßwort lautet "yoda" und die Post soll an den lokalen User "luke" gehen.

Der zweite Eintrag funktioniert analog. Hier zeigt sich übrigens, daß der Account-Name auf dem POP3-Server nicht immer mit dem lokalen Teil der EMail-Adresse übereinstimmt.

Da die Konfigurationsdatei Paßwörter enthält, mußt Du sie vor neugierigen Blicken schützen:

user@sonne> chmod 600 /etc/fetchmailrc 

Nach Eingabe von

user@sonne> fetchmail -f /etc/fetchmailrc 

werden neue Mails abgeholt und lokal in der Standard-Mailbox /var/mail/benutzer (oder bei älteren Systemen in /var/spool/mail/benutzer) gespeichert.

Bis alles wie gewünscht funktioniert, ist es von Vorteil, fetchmail mit der Option '-k' aufzurufen, damit heruntergeladene Mails auf dem Server gespeichert bleiben. Mit der Option '-v' gibt fetchmail ausführliche Diagnose-Informationen aus.

Eine vollständige Beschreibung der Kommandozeilen-Optionen und der Konfigurationsdatei findest Du in der Manpage (man fetchmail).


procmail

Procmail ("process mail") dient der Weiterverarbeitung von Mails. Es kann unter anderem Mail je nach Absender in verschiedene Mail-Folder einsortieren, Spam löschen oder Mails an beliebige Programme weiter- reichen. Wenn Du für einen Mailfilter keine Verwendung hast, kannst Du diesen Abschnitt überspringen.

Damit procmail die Mails, die es sortieren soll, auch erhält, muß Dein Mailserver (sendmail, exim o. ä.) so konfiguriert sein, daß er lokale Mails via procmail zustellt, was bei den meisten Distributionen der Fall ist.

Sollte Dein Mailserver aus irgendeinem Grund nicht zur Zusammenarbeit mit procmail zu bewegen sein, hilft das Erstellen einer ~/.forward-Datei (beschrieben in der procmail-Manpage, Sektion NOTES).

Nachdem sichergestellt ist, daß procmail eingehende Mails erhält, kannst Du damit beginnen, Filterregeln für die Mail zu schreiben. Zur Demonstration wollen wir eingehende Mails im Verzeichnis ~/Mail (MAILDIR) in verschiedenen Mail-Foldern speichern.

Die Datei ~/.procmailrc enthält im Wesentlichen eine Reihe von Filterregeln, die der Reihe nach abgearbeitet werden, bis eine Regel auf die Mail zutrifft. Sollte kein Treffer erzielt werden, speichert procmail im Standard-Folder.

Der Inhalt von ~/.procmailrc:

    # Unterhalb dieses Verzeichnisses liegen die Mailfolder 
    MAILDIR=$HOME/Mail 
     
    # In der Datei "log" listet procmail auf, wo die einzelnen Mails 
    # gespeichert wurden. Das ist besonders zu Testzwecken interessant. 
    LOGFILE=$MAILDIR/log 
     
    # Mails von ackbar@rebelhq.org kommen in den Folder "wichtig". 
    :0: 
    * ^From:.*ackbar@rebelhq.org 
    wichtig 
     
    # Unliebsame Mails kommen nach "unwichtig", einer Zwischenstation 
    # auf dem Weg nach /dev/null 
    :0: 
    * ^From:.*ewoks@endor.net 
    unwichtig 
 
    # Die Mails der Mailingliste discussion@jedi-today.org in den 
    # Folder jedi-liste einsortieren 
    :0: 
    * ^TO_infos@jedi-today.org 
    jedi-liste 
 
    # Das schicken wir gleich weiter an vader@galactic-empire.org 
    :0: 
    * ^TO_newsletter@sith-magazine.com 
    ! vader@galactic-empire.org 

Manchmal lassen sich Mailinglisten nicht so einfach filtern, wie im Beispiel beschrieben. In dem Fall mußt Du suchen, in welchem Header sich die Adresse der Liste befindet. Wenn die Liste beispielsweise den Header "Sender: infos@jedi-today.org" setzt, lautet die Regel so:

    :0: 
    * ^Sender: infos@jedi-today.org 
    jedi-liste 

Sobald Du die procmail-Dokumentation etwas näher untersucht hast, wirst Du feststellen, daß es sich bei den Filterregeln um Reguläre Ausdrücke handelt, man "infos@jedi-today.org" besser als "infos@jedi-today\.org" schreibt und sich Mails hervorragend als Eingabe für selbstgeschriebene Scripts eignen ;-)

Wenn Du bereits eine Mailbox im mbox-Format hast, wie sie beispielsweise Netscape verwendet, kannst Du sie nachträglich mit dem Kommando

user@sonne>   $ formail -s procmail < alte_mailbox 

von procmail sortieren lassen. Das ist außerdem ein guter Test für den neuen procmail-Filter.

Die Manpage procmailex ("man procmailex") bietet eine Menge interessanter Beispiele. "man procmailrc" erklärt den Aufbau der Konfigurationsdatei im Detail und "man procmail" schließlich informiert u. a. über Kommando- zeilenargumente und Diagnosemeldungen.

Wenn Du einen etwas ausführlicheren Einstieg in die Materie suchst, wirst Du unter [1] fündig. Die gesammelten Weisheiten zu procmail, inklusive Scoring und komplexen Verarbeitungstechniken kannst Du in [2] nachlesen. Schnelle Hilfe gegen Spam verspricht [3] in Form eines speziellen Filter-Moduls.


Mail-Clients

Nachdem Deine Mail vorsortiert wurde, ist es jetzt an der Zeit, sie mit einem Mail-Client zu lesen.

Empfehlenswert ist das Konsolen-Programm mutt, das einen großen Funktionsumfang bietet und bis ins letzte Detail an die eigenen Bedürfnisse angepaßt werden kann. Für den Anfang genügt allerdings eine kurze Basis-Konfiguration in ~/.muttrc. Hier ist sie:

    # hier lagert Deine Post 
    set folder = ~/Mail 
     
    # gelesene Mails aus /var/mail/ landen in ~/Mail/mbox 
    set mbox = +mbox 
 
    # hier könnte neue Mail sein 
    mailboxes +wichtig +unwichtig +jedi-liste 
 
    # Mails, die Du verschickt hast, landen in ~/Mail/sent-mails 
    set record = +sent-mails 
 
    # hier kannst Du Deinen Lieblings-Editor eintragen 
    set editor = "/usr/bin/vi" 

Das Plus-Zeichen wird von mutt automatisch durch den Inhalt der Variablen 'folder' ersetzt. +sent-mails steht in diesem Fall also für ~/Mail/sent-mails. Innerhalb von mutt kannst Du durch Eingabe von 'c' in eine andere Mailbox wechseln.

Ausführlich kommentierte und leicht anzupassende Konfigurationen kannst Du beispielsweise unter [4] oder [5] finden. Desweiteren enthält das mutt-Paket ein ausgezeichnetes Handbuch, von dem Du zumindest das Kapitel "Getting Started" lesen solltest.


Der Mail-Ausgang

Zum Verschicken der Mails kommt ein lokaler Mailserver wie sendmail oder exim zum Einsatz. Der Mail-Client gibt Mails an den Mailserver weiter, der umgehend versucht, die Nachrichten zuzustellen. Ist dies mangels Internet-Verbindung gerade nicht möglich, dann landen die Mails in einer Warteschlange (queue).

Da Mailserver nicht einfach zu konfigurieren sind und jede Distribution zu diesem Zweck ihre eigenen Tools mitbringt (YaST unter SuSE, eximconfig unter Debian) würde eine vollständige Beschreibung den Rahmen dieses Artikels sprengen. Falls Du lieber selbst basteln möchtest, findest Du für sendmail unter [6] eine leicht verständliche Anleitung.

Als Basiskonfiguration reicht es normalerweise jedoch aus, einen "Smarthost" anzugeben. Das ist ein SMTP-Server des Providers, der ausgehende Mails entgegennimmt und für Dich zustellt. Außerdem empfiehlt es sich, die Queue nicht ständig automatisch abarbeiten zu lassen, da die meiste Zeit keine Internet-Verbindung besteht.

Wenn die Absender-Adresse im From: lautet, ist es erforderlich, sie durch den Mailserver automatisch zu einer gültigen Adresse umschreiben zu lassen.

Unter sendmail ist dabei für jede Mailadresse ein Eintrag in /etc/genericstable nötig:

    luke skywalker@tatooine.net 
    leia princess.leia@alderaan.net 

Anschließend muß noch ein

user@sonne> makemap hash /etc/genericstable < /etc/genericstable 
ausgeführt werden, damit der Eintrag Wirkung zeigt.

Unter exim werden Einträge an das Ende von /etc/exim.conf angehängt:

    luke@localhost skywalker@tatooine.net   Ff 
    leia@localhost princess.leia@alderaan.net   Ff 

Ist schließlich eine Internet-Verbindung aufgebaut, kannst Du durch Eingabe von

user@sonne>  sendmail -qf 

die Nachrichten in der Queue zustellen lassen. Dieser Befehl funktioniert übrigens auch mit exim, smail oder postfix.


Automatisierung

Das Script /etc/ppp/ip-up wird nach jedem Verbindungsaufbau automatisch abgearbeitet. An das Ende dieser Datei kannst Du die Befehle zum Abholen und Verschicken Deiner Post anhängen:

    # Mail abholen 
    fetchmail -f /etc/fetchmailrc --invisible --syslog 
     
    # Mail verschicken 
    sendmail -qf 

Die Reihenfolge ist dabei wichtig, da insbesondere Freemail-Provider häufig auf SMTP-after-POP bestehen. In diesem Fall ist es nur dann möglich, Mails zu verschicken, wenn man vorher mittels POP3 Mail abgeholt hat

Die Option "--invisible" beim fetchmail-Aufruf sorgt dafür, daß es für den lokalen Server so aussieht, als wären die Mails direkt von einem anderen Server ohne Umweg über eine POP3-Mailbox gekommen.

Durch die Option "--syslog" werden Informationen nach /var/log/messages geschrieben, die bei Problemen von Nutzen sein können.

Falls /etc/ppp/ip-up noch nicht existieren sollte, kannst Du die Datei neu anlegen. Achte darauf, daß die erste Zeile

#! /bin/sh 

lauten muß und das Script mit dem Befehl

user@sonne> chmod 755 /etc/ppp/ip-up

als ausführbar gekennzeichnet ist.

Wenn Du das geschafft hast, sollte dem Mailen unter Linux nichts mehr im Wege stehen.


Quellen

[1] http://www.ii.com/internet/robots/procmail/qs/
[2] http://www.procmail.org/jari/pm-tips.txt
[3] http://www.belwue.de/wwwservices/hilfestellungen/spamblock.html
[4] http://www.spinnaker.de/mutt/
[5] http://www.trash.net/~thomasb/mutt/
[6] http://sendmail.iga.home.pages.de/

Matthias Friedrich

Korrekturen, Kommentare und Verbesserungsvorschläge bitte an mich. Danke!

Vielen Dank an alle, die mich bei der Erstellung dieses Textes unterstützt haben:

Roland Rosenfeld
Jo Moskalewski
Karl-Heinz Zimmer
Thomas Bader
Benjamin Greiner


Anmerkung von Baitronic:

Dieser Artikel wird wöchentlich in der Newsgroup de.comp.os.unix.linux.infos gepostet.
Siehe auch lokaler Mailserver
Autor: de.comp.os.unix.linux.infos