Procmail Beispiele
Inhalt:
- Allgemeines
- Sortierung
- Verwerfen von Nachrichten
- Verwerfen von Nachrichten ab einer bestimmten Größe
- Nachrichten mit mehr als 5 SPAM-Punkten verwerfen
- Nachrichten mit mehr als 2 SPAM-Punkten in den Ordner SPAM verschieben
- Spam-Mails von bestimmten Absendern löschen
- Weiterleiten von Emails
- Negative Bedingung für ein Rezept
- Verschiedene Bedingungen für ein Rezept
- Verschiedene Aktionen für eine Mail
- Abgleichen von zwei Postfächern
- Autoreply im Falle eines Urlaubs
- Textkörper durchsuchen
- Fehlerbehebung
- Weitere Informationen
Allgemeines
Die Datei .procmailrc muss am Beginn folgende Zeilen enthalten:
DELIVER=/usr/local/sbin/dmail
Nachrichten werden dann mit
| $DELIVER + Folder
statt in der INBOX im Mailfolder Folder abgelegt. Der Folder muss beim Eintreffen der Nachricht bereits existieren, sonst landen die Nachrichten trotzdem in der INBOX!
Ganz wichtig ist auch, dass die folgenden Zeilen am Ende des Filters stehen:
:0 w
| $DELIVER +INBOX
Das bedeutet, dass alle Emails, die nicht herausgefiltert wurden, in die INBOX wandern.
Sortierung nach Betreff (Subject)
:0 w
* ^Subject:.*Termin
| $DELIVER +Termin
Hiermit wird eine Mail, in deren Betreff irgendwo die Zeichenkette " Termin " vorkommt, im Ordner Termin gespeichert.
Sortierung nach Absender (From)
:0 w
* ^From:.*Dagobert
| $DELIVER +Privat
Hiermit wird eine Mail, die von Dagobert (Absendername) kommt, im Ordner Privat abgespeichert.
Sortierung nach Empfänger (To)
:0 w
* ^TO.*Dagobert
| $DELIVER +Privat
Hierdurch wird alle Mail, die an Dagobert geschickt wurde, im Ordner Privat abgespeichert [TO ist eine Klasse, die für alle möglichen Adressierungsfelder steht (To:, Cc:, Resent-To:)].
Wenn Sie z. B. im Netscape Messenger unter Bearbeiten\Einstellungen\Mail&Diskussionsforen\Kopien und Ordner ein BCC: an Ihre eigene Adresse einstellen, erhalten Sie automatisch eine Kopie Ihrer Ausgangspost, die Sie dann auch mit procmail bearbeiten können.
Verwerfen von Nachrichten
Möchte man, dass bestimmte Emails gar nicht gespeichert werden, so gibt man als Aktion einfach /dev/null
an. Das bedeutet, dass diese Emails automatisch und unwiderruflich gelöscht werden, wenn sie ankommen.
:0
* ^Subject:.*k.*ndigung
/dev/null
Verwerfen von Nachrichten ab einer bestimmten Größe
Alle Nachrichten mit mehr als 100 KByte Umfang verwerfen
:0
* > 100000
/dev/null
Nachrichten mit mehr als 5 SPAM-Punkten verwerfen
# Nachrichten mit SPAM-Score >= 5 löschen
:0 w
* ^X-Spam-Score:.*\(\*\*\*\*\*
/dev/null
Den Zeichen ( und * muss ein Backslash \ vorangestellt werden, damit sie wirklich als Klammer und Stern und nicht als Wildcards etc. interpretiert werden.
Nachrichten mit mehr als 2 SPAM-Punkten in den Ordner SPAM verschieben
# Nachrichten mit SPAM-Score >= 2 in den Mailordner SPAM verschieben
:0 w
* ^X-Spam-Score:.*\(\*\*
| $DELIVER +SPAM
Das Rezept kann mit dem vorhergehenden hintereineinander in einer Rezeptdatei verwendet werden. Nachrichten über fünf Punkte landen dann im Nirwana, Nachrichten mit 2 bis 4,99 Punkte landen im Ordner SPAM.
Spam-Mails von bestimmten Absendern löschen
Mit diesem Rezept sorgen Sie dafür, dass alle Emails, die von den unten angeführten Domains kommen, automatisch gelöscht werden.
:0
* ^From:.*@(yellow.com|spamworld.de|austria3.at)
/dev/null
Weiterleiten von Emails an eine Adresse
:0
* ^From:.*Dagobert
!forward@uibk.ac.at
Alle Emails, die von einem Absender namens Dagobert kommen, werden an die Adresse forward@uibk.ac.at weitergeleitet. Um eine Kopie auf dem Mail-Server zu behalten, verwenden Sie bitte
:0 c
* ^From:.*Dagobert
!forward@uibk.ac.at
Weiterleiten von Emails an mehrere Adressen
Möchten Sie die Emails an viele Empfänger weiterleiten, können sie auch
:0 w
* ^From:.*Dagobert
! `cat addressen.txt`
verwenden. Die Datei adressen.txt enthält dabei die Empfängeradressen, eine Adresse pro Zeile.
Weiterleiten aller Emails
Möchten Sie alle verbliebenen Emails an weiterleitung@neu.com weiterleiten, sollten Sie unbedingt die Fehlermeldungen von den Mail-Delivery-Systemen ausnehmen, da sonst leicht Endlosschleifen entstehen können. Die Delivery-Meldungen gehen in den Papierkorb.
:0 w
* !^FROM_DAEMON
! weiterleitung@neu.com
:0 w
/dev/null
Weiterleiten von veränderten Emails
Um den Header einer weitergeleiteten Mail zu verändern, gehen Sie folgendermaßen vor:
:0 cw
* ^Subject:.*New
| formail -k -X "From:" \
-I "To: cb0429@dm.uibk.ac.at" -X "To:" \
-I "Subject: Neues Subject" -X "Subject:" \
| $SENDMAIL $SENDMAILFLAGS -t
Durch die Zeile formail mit den entsprechenden Parametern wird der Header der bestehenden Mail so gekürzt, dass nur noch die von Ihnen gewünschten Informationen bestehen bleiben, z. B. das Subject oder der Absender. Mit den nächsten Zeilen sorgen Sie dafür, dass dem Header neue Informationen hinzugefügt werden. Dann wird das Ergebnis an Sendmail übergeben. Der Parameter -t bedeutet hier, dass die Zeilen To: und Cc: die Empfängeradresse beinhalten.
Negative Bedingung für ein Rezept
:0
* ! From:.*uibk.ac.at
| $DELIVER +Extern
Bei diesem Beispiel werden alle Mails, die nicht von der Domain uibk.ac.at geschickt werden, in den Ordner Extern verschoben.
Verschiedene Bedingungen für ein Rezept
:0 w
* ^Subject:.*Dank|^To:.*csaa3646@uibk.ac.at|^From:.*uibk.ac.at
| $DELIVER +Dank
Bei diesem Beispiel werden alle Mails, die das Wort Dank im Betreff haben ODER an die Adresse csaa3646@uibk.ac.at geschickt wurden ODER von der Domain uibk.ac.at weggeschickt wurden, in den Ordner Dank verschoben.
Verschiedene Aktionen für eine Mail
Um verschiedene Rezepte auf eine Mail anwenden zu können, ist die einfachste Möglichkeit, die Mail zu kopieren.
# Weiterleitung an Adresse1
:0 c
* ^From:.*Dagobert
! Adresse1@uibk.ac.at
# Abspeichern im Ordner Privat
:0 w
* ^From:.*Dagobert
| $DELIVER +Privat
Die elegantere und übersichtlichere Methode besteht darin, geschwungene Klammern zu verwenden.
:0 w
* ^From:.*Dagobert
{
:0 w
| $DELIVER +Privat
:0
! Adresse1@uibk.ac.at
}
Abgleichen von zwei Postfächern
Sie haben noch einen zweiten Account, z. B. für ein Projekt oder bei einem anderen Provider und würden gerne bei beiden den gleichen Mail-Bestand haben. Zwei Autoforwards einzurichten ist nicht sinnvoll, da Sie sich sonst die Mails hin und herschicken und es zu einem Endlos-Loop kommt. Verwenden Sie deshalb bitte folgendes Rezept:
# Überprüfen, ob Absender anderer Account
:0 c
* ! csaa3646@uibk.ac.at
! projekt_csaa3646@uibk.ac.at
Das c steht für Kopie, d.h. Sie behalten eine Kopie dieser Mail, das erste Ausrufezeichen in der Bedingungszeile bedeutet außer wenn , das zweite Ausrufezeichen in der Aktionszeile bedeutet Sende an\Forward .
Autoreply im Falle eines Urlaubs
Verwenden Sie bitte das Programm vacation. Sie können es ebenfalls wie das procmail-Programm im Mailmenü unter "Erweiterte Funktionen" aktivieren und konfigurieren.
Textkörper durchsuchen
Standardmäßig durchsucht procmail den Header Ihrer Nachrichten. Um auch den Textkörper zu durchsuchen, verwenden Sie folgendes Rezept:
:0 B
* ^.*Rechnung
| $DELIVER +Dringend
Nun werden alle Mails, die den Begriff Rechnung enthalten in den Ordner Dringend verschoben.
Fehlerbehebung
Vor allem am Anfang oder wenn Sie noch nicht mit UNIX gearbeitet haben, kann es passieren, dass das ganze nicht so funktioniert wie Sie es haben möchten. Um die Fehler zu finden, gehen Sie bitte folgendermaßen vor:
Fügen Sie der Datei .procmailrc folgende Zeilen hinzu:
VERBOSE=yes
LOGFILE=procmail.log
Nun wird bei jeder eingehenden Mail detailliert protokolliert, was procmail tut.
Wenn procmail wirklich nichts tut und nicht einmal eine Log-Datei im Home-Verzeichnis erstellt, sollte der Eintrag in der Datei .forward erstmal nachgeprüft werden.
Wenn procmail absolut nicht das tut was erwartet wird, ist zuallererst die Datei .procmailrc aufs allergenaueste auf Fehler hin zu überprüfen, die Datei procmail.log kann dabei weiterhelfen. Am besten ein Rezept nach dem anderen eingeben und jedes einzelne testen, z. B. indem Sie erhaltene Mails, die Ihren Kriterien entsprechen, im Web-Mail aufrufen und sich mit dem Befehl weiterschicken noch einmal senden. So können Sie überprüfen, ob die Rezepte nach den Änderungen nach Ihren Wünschen ausgeführt werden.
Bei Mailschleifen und fehlerhaften Rezepten werden alle Mails in die Datei dead.letter geschrieben, von dort aus können sie nur noch per FTP (im Textmodus!) gelesen werden.
Die Datei .procmailrc muss per FTP im ASCII-/Text-Modus übertragen werden !
Weitere Informationen:
- Procmail Man Pages:
- man procmail Procmail Übersicht
- man procmailex Procmail Beispiele
- man procmailrc Procmail Konfigurationsdatei
- man formail formail Hilfsprogramm
- Externe Links:
- Procmail: http://www.procmail.org
- Procmail Links: http://www.iki.fi/~era/procmail/links.html
- Procmail-Tutorial: ftp://cs.uta.fi/pub/ssjaaa/pm-tips.html
