Procmail Beispiele

Inhalt:

  1. Allgemeines
  2. Sortierung
  3. Verwerfen von Nachrichten
  4. Verwerfen von Nachrichten ab einer bestimmten Größe
  5. Nachrichten mit mehr als 5 SPAM-Punkten verwerfen
  6. Nachrichten mit mehr als 2 SPAM-Punkten in den Ordner SPAM verschieben
  7. Spam-Mails von bestimmten Absendern löschen
  8. Weiterleiten von Emails
  9. Negative Bedingung für ein Rezept
  10. Verschiedene Bedingungen für ein Rezept
  11. Verschiedene Aktionen für eine Mail
  12. Abgleichen von zwei Postfächern
  13. Autoreply im Falle eines Urlaubs
  14. Textkörper durchsuchen
  15. Fehlerbehebung
  16. 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: