home of de.comp.os.unix.linux.*
 
 
 

Mail-Handling unter Linux

von Matthias Friedrich, Version vom 26.06.2000

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.

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: 
 Paßwort: 
 POP3-Server: 
 SMTP-Server: 
 skywalker 
 yoda 
 pop.tatooine.net 
 mail.tatooine.net 
 2345123 
 obi-wan 
 pobox.alderaan.net 
 mailout.alderaan.net 
 Lokaler User:   luke   leia 

Der Mail-Eingang

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:

# chmod 600 /etc/fetchmailrc

Nach Eingabe von

# 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 weiterreichen. 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.

Wenn Du exim unter Debian benutzt, mußt Du dafür in /etc/exim.conf den Abschnitt

local_delivery:
    driver = appendfile
    group = mail
    mode = 0660
    mode_fail_narrower = false
    file = /var/spool/mail/${local_part}

durch

local_delivery:
    driver = pipe
    command = "/usr/bin/procmail -d ${local_part}"
    group = mail
    from_hack

ersetzen.

Sollte Dein Mailserver aus irgendeinem Grund procmail nicht benutzen, 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

$ 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 Kommandozeilenargumente 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/<benutzer> 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: <benutzername@localhost> 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

# 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

# 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

# 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.

[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 mafr@topmail.de - Korrekturen, Kommentare und Verbesserungsvorschläge bitte an mich. Danke!

Vielen Dank an die Mitglieder der dcouli-authors-Liste, die mich bei der Erstellung dieses Textes unterstützt haben:

Roland Rosenfeld
Jo Moskalewski
Karl-Heinz Zimmer
Thomas Bader