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:

LinuxUser 04/2002 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: