Mails bearbeiten mit procmail

Aus LinuxUser 04/2002

Mails bearbeiten mit procmail

Der Meister der Rezepte

Auf den ersten Blick erschrecken viele Anwender vor der scheinbar kryptischen Syntax der Filterregeln, mit denen Procmail Mails bearbeitet und sortiert. Auf den zweiten Blick hingegen zeigt sich das Programm als wahrer Alleskönner.

Mit einer einprägsamen aber vielfältigen Konfigurationssprache, die leicht zu handhaben, und mit der fast alles möglich ist, erweist sich Procmail als mächtiges Werkzeug: Vom simplen Verteilen der Mails auf einzelne Ordner bis zur Weiterleitung der Nachrichten via SMS ist alles möglich.

Schreck lass nach: Das Rezept

Doch wie funktioniert dieses Programm eigentlich? In der Datei /etc/procmailrc definieren Sie die systemweiten Filterregeln für Procmail. Wenn Sie einen Einzelplatz-Rechner benutzen, erstellen Sie jedoch am sinnvollsten in Ihrem Home-Verzeichnis die Datei ~/.procmailrc, denn dort findet Procmail die lokalen Regeln, die es auf die eingetroffene Post anwendet. Diese Regeln heißen in den umfangreichen Manualseiten von Procmail Rezepte (Recipes).

Ein Rezept sagt Procmail beispielsweise, nach welchen Zeichenketten es in den Mails schauen, und welche Aktion ausgeführt werden soll, wenn es dieses Muster erkannt hat. Vielleicht mag das für den Anfang recht abstrakt klingen, und deshalb sehen wir uns so ein Rezept einmal aus der Nähe an:

:0
* ^From:.*@tuxnordpol\.de
tux

Als erstes Zeichen des obigen Rezeptes finden Sie den Doppelpunkt, an dem Procmail erkennt, dass nun ein neues Rezept beginnt. Auf den Doppelpunkt folgt immer eine Null und optional weitere Zeichen, mit denen wir uns im Abschnitt Flags noch beschäftigen werden.

Ein weiterer Doppelpunkt nach der Null bedeutet, dass für das Rezept ein Lockfile benutzt werden soll. Da dies jedoch nur selten im Alltagsgebrauch nötig ist, wird das Thema Lockfile an dieser Stelle nicht angeschnitten. Bei Bedarf erhalten Sie eine ausführliche Hilfestellung in den Manualseiten von Procmail, die Sie in der Konsole einsehen können mit den Befehlen man procmail, man procmailex, man procmailsc und man procmailrc.

Die zweite Zeile wird mit dem Sternchen * eingeleitet und Bedingung (Condition) genannt. Dieses Sternchen hat eine völlig andere Lesart für Procmail als das Zeichen * in .*@tuxnordpol\.de. Dazu finden Sie die Details im weiteren Textverlauf.

An unserem Beispiel-Rezept sehen Sie, dass lediglich eine Bedingung definiert wurde: ^From:.*@tuxnordpol\.de. Sie können jedoch auch mehrere oder gar keine Bedingung festlegen, wenn Sie möchten. Und was bedingt diese Bedingung? Die Antwort lautet: Die Aktion, die Sie hier in der dritten und letzten Zeile sehen.

Die Aktions-Zeile legt fest, was mit der Nachricht, die die Bedingung erfüllt, passieren soll. In unserem Falle wird jede Nachricht, die im From-Header den Absender @tuxnordpol.de trägt, in den Mail-Ordner tux sortiert: sowohl tux@tuxnordpol.de als auch igloo@tuxnordpol.de oder hering@tuxnordpol.de finden dort Eingang.

Die Rezepte der Datei ~/.procmailrc werden von oben nach unten auf ihre Bedingung hin geprüft. Trifft die Bedingung zu, wird die dafür definierte Aktion ausgeführt. Trifft die Bedingung nicht zu, wird die Mail an das nächste Rezept gereicht oder landet im Default-Ordner. Hinweise, wie Sie den Default-Ordner und andere Umgebungsvariablen für Procmail festlegen, finden Sie im Abschnitt Variablen.

Reguläre Ausdrücke

Um es Procmail zu ermöglichen, die Nachrichten genau nach Ihren Wünschen zu ordnen, müssen Sie sich regulärer Ausdrücke bedienen. Wenn Sie sich die Bedingungs-Zeile des Beispiels noch einmal ansehen, dann stoßen Sie auf das Caret ^, den Punkt . und den Asterisk * . Diese Zeichen stehen als Stellvertreter für Buchstaben- und Zahlengruppen oder halten die Lage einer Zeichengruppe in einer Zeile fest. Auch das klingt schwieriger als es ist, wie Sie in Tabelle 1 sehen können.

Tabelle 1: Reguläre Ausdrücke

^ Die folgende Zeichenkette steht am Zeilenanfang
$ Die vorhergehende Zeichenkette steht am Zeilenende
. Ein beliebiges Zeichen
* Das vorhergehende Zeichen mehrmals, einmal oder gar nicht
+ Das vorhergehende Zeichen mindestens einmal oder mehrmals
? Das vorhergehende Zeichen entweder einmal oder gar nicht
[a-k] Jedes Zeichen von a bis k
[^a-k] Jedes Zeichen außer a bis k
de|com Entweder de oder com
(abcd)* Endweder mehrmals, einmal oder gar nicht die Zeichenkette abcd
! Invertiert die Bedingung
\ Das folgende Zeichen wird maskiert. Dass heißt der Backslash hebt die besondere Bedeutung eines Zeichens auf. Der Punkt steht als regulärer Ausdruck für ein beliebiges Zeichen. Ein \. gibt dem regulären Ausdruck wieder seinen ursprünglichen Sinn als Punkt zurück.

Natürlich können Sie die regulären Ausdrücke miteinander verbinden. So bedeutet die Kombination .* ein beliebiges Zeichen mehrmals, einmal oder gar nicht. Wenn Sie sich näher über die regulären Ausdrücke informieren möchten, bietet sich neben den Manualseiten von Procmail ebenfalls man egrep auf der Konsole an.

Flags

Um die Arbeit von Procmail zu verfeinern, stehen Flags für Sie bereit, die Sie optional hinter den Zeichen :0 in das Rezept einfügen können:

:0 B
* ^.*(cash|sex|adult|dollar|girls|visit)
/dev/null

Mit der Flag B durchsucht Procmail nun, anstatt des Headers, den Textkörper der Mail nach den angebebenen Begriffen. Sollte eines der Wörter gefunden werden, wandert die Nachricht unwiederbringlich in den Mülleimer Ihres Rechners. Tabelle 2 zeigt Ihnen die möglichen Flags in der Einleitungszeile.

Tabelle 2: Flags

H Der Header wird durchsucht
B Der Textkörper wird überprüft
D Klein- und Großbuchstaben werden unterschieden
A Das Rezept wird nur angewandt, wenn das vorherige Rezept ebenfalls angewandt wurde.
a Wie A, nur dass das vorherige Rezept ohne Fehlermeldung angewandt werden musste.
E Dieses Rezept wird ausgeführt, wenn das vorherige Rezept nicht ausgeführt werden konnte.
e Wenn das vorherige Rezept ausgeführt, aber mit einer Fehlermeldung abgebrochen wurde, soll dieses Rezept angewandt werden.
h Der Header wird an einen Befehl übergeben
b Der Textkörper wird an einen Befehl übergeben
f Benutzt den Befehl als Filter
c Erstellt eine Kopie der Nachricht
w Wartet auf den Exitcode des Filters oder Programmes
W Wie w, unterdrückt jedoch eine mögliche Fehlermeldung
i Ignoriert jeden Schreibfehler im Rezept
r Stellt nicht sicher, ob die Mail mit einer Leerzeile endet und schreibt sie so, wie sie ist

Aktion

In der Erläuterung zu den Flags, die Sie eben gelesen haben, tauchte an einigen Stellen der Begriff des “Befehls” auf. Im Gegensatz zu den meisten Filterprogrammen ist Procmail in der Lage, eine Mail an einen Befehl zu leiten und bearbeiten zu lassen. Sehen wir uns auch dazu ein Beispiel an:

:0 fhw
* ^From:.*anonym@tuxnordpol\.de
| formail -i "From: Hans Realname
"

Das Pipe-Zeichen werden Sie vielleicht schon aus unserem Bash-Workshop kennen (Heft 11/2000, S. 86). Mit der Pipe lenken Sie den Weg der Mail um. In diesem Falle wird jede Mail von anonym@tuxnordpol.de an das Programm Formail geleitet, das in den From-Header der Nachricht den realen Namen des Absenders einträgt. Auf diese Weise kann auch, vorausgesetzt, Sie haben das nötige Programm installiert, die Kopie eines Mail-Headers via SMS an Ihr Handy geleitet werden:

:0 hc
* ^From:.*godot@tuxnordpol\.de
* ^Subject:.*waiting
|/usr/local/bin/smsprogramm

Natürlich leitet Procmail eine Mail auch als Mail weiter. Dazu dient Ihnen das Ausrufezeichen ! in der Aktions-Zeile:

:0
* ^Sender:.*linux-mailingliste
! hering@tuxnordpol.de

Während das Ausrufezeichen in der Aktions-Zeile das Signal zur Weiterleitung ist, invertiert es in der Bedingung die Angaben. Im nächsten Rezept wird erneut jede Mail mit dem Sender-Header linux-mailingliste an hering@tuxnordpol.de geschickt. Die einzige Ausnahme bilden diesmal Mails, in deren Betreff das Wort “Test” vorkommt:

:0
* ^Sender:.*linux-mailingliste
* !^Subject:.*test
! hering@tuxnordpol.de

Es muss also nicht immer ein From: oder To: sein, nach dem die Suche ausgerichtet ist. Jede Header-Zeile kann in der Bedingung definiert werden, ob sie nun Sender: heissen mag oder:

:0
* ^Content-Type:.*text/html
html-mails
Abbildung 1: Ein Blick in die Datei ~/.procmailrc

Abbildung 1: Ein Blick in die Datei ~/.procmailrc

Variablen

Damit sich Procmail auf Ihrem Rechner richtig zuhause fühlt, müssen Sie dem Programm mit einigen Variablen sagen, wo es bestimmte Verzeichnisse und Pfade findet. Diese Variablen stehen im Kopf der Datei ~/.procmailrc, über den Rezepten. Obwohl Procmail sehr gute Voreinstellungen mitbringt, sollten Sie nichts dem Zufall überlassen und die Einträge Ihrem System anpassen.

Die erste Variable verrät Procmail Ihr Mail-Verzeichnis:

# Hier liegen die Mails
MAILDIR=$HOME/Mail

Im nächsten Schritt erstellen Sie die Variable für den Ort des Logfiles, in das Procmail einen Bericht über jede sortierte Mail schreibt:

# Das Logfile soll ins Home-Verzeichnis
LOGFILE=$HOME/proclog

Damit das Logfile sehr ausführlich ausfällt, müssen Sie Procmail geschwätzig machen:

# Ein detailliertes Logfile
VERBOSE=yes

Und zuletzt möchte Procmail den Default-Ordner wissen. Dort hinterlegt das Programm jede Mail, auf die kein Rezept passte:

DEFAULT=$MAILDIR/inbox

Eine Übersicht der Umgebungsvariablen erhalten Sie in xterm oder Konsole mit dem Kommando man procmailrc.

Der Test

Wenn Sie ein Rezept aufgestellt haben, das Sie nun auf seine Tauglichkeit testen wollen, müssen Sie keine Mail im Selbstversuch zu Ihrem Provider schicken. Das Programm Formail, das zusammen mit Procmail ausgeliefert wird, hilft Ihnen, Onlinekosten und Wartezeit zu sparen.

Öffnen Sie einfach Ihren Lieblingseditor, und schreiben Sie pro Zeile eine zu testende Header-Zeile oder den Textkörper der Mail hinein. Dann speichern Sie die geschaffene Datei unter dem Namen proctest ab:

From: tux@nordpol.de
Subject: Auftrag
Dies ist eine Testmail

Durch einen Befehl der Kommandozeile versenden Sie diese interne Testmail, als käme Sie frisch aus dem Postfach Ihres Providers:

cat proctest | formail -ds procmail

Nun können Sie ohne Kosten und gefahrlos experimentieren und sich ganz der Bastelfreude hingeben.

LinuxUser 04/2002 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben