<2004-08-20> Mailhandling unter Linux
- From: Ralph Angenendt <ihr.name@xxxxxxxxxxxxxxxxx>
- Date: Mon, 3 Apr 2006 08:59:03 +0200 (CEST)
[Dieser Artikel erscheint wöchentlich.]
Last Changes: 2004-08-20
Mail-Handling unter Linux
=========================
Unter Windows werden Mails normalerweise vom Mailclient abgeholt und
auch wieder verschickt.
Obwohl diese Methode mit Programmen wie Mozilla 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@xxxxxxxxxxxx | princess.leia@xxxxxxxxxxxx |
+---------------+--------------------------+------------------------------+
| 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 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 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 in der Standard-Mailbox /var/mail/benutzername.
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@xxxxxxxxxxx kommen in den Folder "wichtig".
:0:
* ^From:.*ackbar@xxxxxxxxxxx
wichtig
# Unliebsame Mails kommen nach "unwichtig", einer Zwischenstation
# auf dem Weg nach /dev/null
:0:
* ^From:.*ewoks@xxxxxxxxx
unwichtig
# Die Mails der Mailingliste discussion@xxxxxxxxxxxxxx in den
# Folder jedi-liste einsortieren
:0:
* ^TO_infos@xxxxxxxxxxxxxx
jedi-liste
# Das schicken wir gleich weiter an vader@xxxxxxxxxxxxxxxxxxx
:0:
* ^TO_newsletter@xxxxxxxxxxxxxxxxx
! vader@xxxxxxxxxxxxxxxxxxx
# Wenn die Mail von keiner Regel erfaßt wird, landet sie
# schließlich in der Standard-Mailbox: /var/mail/benutzername.
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@xxxxxxxxxxxxxx" setzt, lautet die Regel so:
:0:
* ^Sender: infos@xxxxxxxxxxxxxx
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@xxxxxxxxxxxxxx" 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 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/<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. Das Ausrufezeichen steht für die Standard-Mailbox.
Innerhalb von mutt kannst Du durch Eingabe von 'c' in eine andere Mailbox
wechseln. Wenn Du mutt mit der Option '-y' startest, erhälst Du alle
Mailboxen auf einen Blick.
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). Den Inhalt der Warteschlange
kannst Du jederzeit mit dem Kommando "mailq" anzeigen lassen.
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. Bei einigen
Freemail-Providern müssen zusätzlich Benutzername und ein Paßwort
angegeben werden.
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@xxxxxxxxxxxx
leia princess.leia@xxxxxxxxxxxx
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@xxxxxxxxxxxx Ff
leia@localhost princess.leia@xxxxxxxxxxxx Ff
Ist schließlich eine Internet-Verbindung aufgebaut, kannst Du durch
Eingabe von
# sendmail -q
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 -q
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://pm-doc.sourceforge.net/
[3] http://www.belwue.de/wwwservices/hilfestellungen/spamblock.html
[4] http://www.spinnaker.de/mutt/
[5] http://www.trash.net/~thomasb/mutt/
[6] http://www.uugrn.org/sendmail/
Ralph Angenendt <ralph+mailhandling@xxxxxxxxxxxxxxxxx>
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
Matthias Friedrich
--
We can't be dead. We have cable.
Nicht schreiben können: http://lestighaniker.de/
.
- Prev by Date: <2005-06-29> Büchertipps für Unixnutzer
- Next by Date: <2002-12-01> Linux-Informationsquellen
- Previous by thread: <2005-06-29> Büchertipps für Unixnutzer
- Next by thread: <2004-08-20> Mailhandling unter Linux
- Index(es):
Relevant Pages
|