#============================================================================= # # Dies ist ein funktionierendes Beispiel fuer Wegsortierregeln. # #============================================================================= # # Dieses Beispiel ist gueltig ab perMail 5.16. # # Zuerst die formelle Beschreibung aller moeglichen Elemente. # # Fuer jede wegzusortierende E-Mail werden die Regeln nacheinander # ausgewertet, bis entweder die E-Mail in einem Ordner abgelegt wurde oder # eine Markierung gesetzt oder geloescht wurde oder alle Regeln ohne # Ergebnis abgearbeitet wurden. # # Jede Regel besteht aus folgenden Zeilen: # # field = Suchfeldname Diese Zeile leitet eine neue Regel ein. # current = Ordner Diese Zeile darf beliebig oft vorkommen. # mailseen = 1-oder-0 Diese Zeile darf hoechstens einmal vorkommen. # mailprocessed = 1-oder-0 Diese Zeile darf hoechstens einmal vorkommen. # mailflagged = 1-oder-0 Diese Zeile darf hoechstens einmal vorkommen. # ifflags = Buchstaben Diese Zeile darf hoechstens einmal vorkommen. # mailsize <=> Zahl Diese Zeile darf hoechstens einmal vorkommen. # headsize <=> Zahl Diese Zeile darf hoechstens einmal vorkommen. # bodysize <=> Zahl Diese Zeile darf hoechstens einmal vorkommen. # condition = Woerter Diese Zeile muss genau einmal vorkommen. # data = Zeichenfolge Diese Zeile darf beliebig oft vorkommen. # folder = Zielordner Diese Zeile darf hoechstens einmal vorkommen. # setmark = 1-oder-0 Diese Zeile darf hoechstens einmal vorkommen. # setflags = Buchstaben Diese Zeile darf hoechstens einmal vorkommen. # resendto = Adressliste Diese Zeile darf hoechstens einmal vorkommen. # comment = Kommentar Diese Zeile darf beliebig oft vorkommen. # # Beispiel: # # field = Subject # Falls die Betreffzeile ... # current = # einer Mail im Posteingang ... # condition = contains word # ein bestimmtes Wort enthaelt ... # data = Viruswarnung # und zwar das Wort "Viruswarnung" ... # data = Virenwarnung # oder auch das Wort "Virenwarnung", ... # folder = deleted-messages # dann wirf die E-Mail in die Abfalltonne. # comment = Mit perMail sind wir vor Viren gut geschuetzt. # # Um kompliziertere Regelsaetze aufstellen zu koennen, stehen 26 Flaggen mit # den Namen A bis Z zur Verfuegung, die gehisst oder gesenkt werden koennen. # Regeln koennen die Bedingung enthalten, dass sie nur dann angewendet werden, # wenn bestimmte Flaggen gehisst oder gesenkt sind. # # Fuer jede E-Mail werden zuerst alle Flaggen gesenkt und dann jede einzelne # Regel wie folgt interpretiert: # # 1. Falls "current" angegeben wurde, ueberpruefe ob der aktuelle Ordner mit # einem der angegebenen Ordner uebereinstimmt. # (Dabei sind die Ordnernamen im internen Format anzugeben, also # "current =" fuer den Posteingang, # "current = saved-messages" fuer die Gesendet-Ablage, # "current = deleted-messages" fuer die Abfalltonne, # Falls dies nicht der Fall ist, springe zur naechsten Regel. # # 2a Falls "mailseen" angegeben wurde, ueberpruefe, ob die E-Mail wie # angegeben gelesen oder ungelesen ist. # Falls dies nicht der Fall ist, springe zur naechsten Regel. # # 2b Falls "mailprocessed" angegeben wurde, ueberpruefe, ob die E-Mail wie # angegeben bearbeitet oder nicht bearbeitet ist. # (Bearbeitet heisst: beantwortet, weitergeleitet, nachgesendet, # kopiert, geloescht, entschluesselt, zurueckgewiesen, als SPAM # zurueckgewiesen oder als SPAM gemeldet, aber nicht gelesen, # geflaggt oder angefasst.) # Falls dies nicht der Fall ist, springe zur naechsten Regel. # # 3. Falls "mailflagged" angegeben wurde, ueberpruefe, ob die E-Mail wie # angegeben geflaggt oder ungeflaggt ist. # Falls dies nicht der Fall ist, springe zur naechsten Regel. # # 4. Falls "ifflags" angegeben wurde, ueberpruefe ob die mit Grossbuchstaben # angegebenen Flaggen gehisst und die mit Kleinbuchstaben angegebenen # Flaggen gesenkt sind. Falls dies bei mindestens einer Flagge nicht der # Fall ist, springe zur naechsten Regel. # # 5. Falls "mailsize" angegeben wurde, ueberpruefe ob die Gesamtgroesse der # E-Mail in Bytes die angegebene Bedingung erfuellt. # ("<=>" kann jede sinnvolle Kombination der Zeichen '<', '=', '>' sein.) # Falls dies nicht der Fall ist, springe zur naechsten Regel. # # 6. Falls "headsize" angegeben wurde, ueberpruefe ob die Gesamtgroesse des # E-Mail-Kopfes in Bytes die angegebene Bedingung erfuellt. # ("<=>" kann jede sinnvolle Kombination der Zeichen '<', '=', '>' sein.) # Falls dies nicht der Fall ist, springe zur naechsten Regel. # # 7. Falls "mailsize" angegeben wurde, ueberpruefe ob die Gesamtgroesse des # E-Mail-Inhalts (Body) in Bytes die angegebene Bedingung erfuellt. # ("<=>" kann jede sinnvolle Kombination der Zeichen '<', '=', '>' sein.) # Falls dies nicht der Fall ist, springe zur naechsten Regel. # # 8. Ueberpruefe, ob die mit "field" angegebene Kopfzeile der Bedingung # genuegt, die mit "condition" und ggf. mit "data" angegeben wurde. # Falls dies nicht der Fall ist, springe zur naechsten Regel. # # 9a Falls mit "setmark" das Markieren oder Unmarkieren der E-Mail angegeben # wurde, markiere bzw. unmarkiere die E-Mail. # # 9b Falls mit "resendto" eine Zieladressenliste zum Nachsenden angegeben # wurde, sende die E-Mail an die Adressenliste nach (ohne neue Kopfzeilen # und ohne eine Kopie der nachgesendeten E-Mail anzulegen, fuer letzteres # kann "folder" benutzt werden, siehe 7c). # # 9c Falls mit "folder" ein gueltiger Zielordner angegeben wurde, lege die # E-Mail dort ab. # (Dabei sind die Ordnernamen im internen Format anzugeben, also # "folder =" fuer den Posteingang, "folder = saved-messages" fuer die # Gesendet-Ablage und "folder = deleted-messages fuer die Abfalltonne. # Ab Version 1.18 kann mit "folder = /" der Reisswolf als Zielordner # angegeben werden, um eine E-Mail zu vernichten. # # 9d Falls einer oder mehrere der Schritte 5a, 5b und 5c ausgefuehrt wurden, # beende die Abarbeitung der Regeln fuer diese E-Mail. # # 10 Falls "setflags" angegeben wurde, hisse die mit Grossbuchstaben # angegebenen Flaggen und senke die mit Kleinbuchstaben angegebenen # Flaggen. # # Falls nach der Abarbeitung aller Regeln die E-Mail nicht durch Regel 7c # abgelegt wurde, verbleibt sie im aktuellen Ordner. # # Falls kein Suchfeldname angegeben wurde, wird der gesamte E-Mail-Kopf # betrachtet, falls nur ein Doppelpunkt angegeben wurde, der Inhalt (Body). # # Die vollstaendige Syntax der Suchfeldnamen sieht so aus: # Teilangabe:Bereichsangabe:Feldname # Die Teilangabe bezeichnet, welcher Teil der E-Mail durchsucht werden soll: # 0 = Die E-Mail ohne Teile (Voreinstellung falls nicht angegeben) # 0.2 = Der 2. Teil der E-Mail # 0.* = Ein beliebiger Teil der E-Mail # 0.2.** = Ein beliebiger Teil oder Unterteil des 2. Teils der E-Mail # 0.** = Ein beliebiger Teil oder Unterteil der E-Mail # ** = Die E-Mail oder ein beliebiger Teil oder Unterteil # Die Bereichsangabe bezeichnet den Bereich dieses Teils: # H = Kopf (Header; Voreinstellung bei Angabe eines Feldnamens) # B = Inhalt (Body; Voreinstellung bei Fehlen eines Feldnamens) # F = Voller Kopf (Full header; Voreinstellung bei fehlender Angabe) # A = Alle Bereiche # Der Feldname (sinnvoll nur im Kopf) bezeichnet die Kopfzeile ohne den # abschliessenden Doppelpunkt: # Subject, To, Cc, From, Received u. v. a. m. # Beispiel: "0.1:H:Content-Type" bezeichnet den Typ des Inhalts des ersten # Teils einer mehrteiligen E-Mail. # # In der Zielordnerangabe "folder = ..." koennen folgende Zeichenketten # verwendet werden, die im Einzelfall ersetzt werden: # # //CF = Aktueller Ordner (interner Name, leer fuer Posteingang) # //CU = Aktuelle Username (Nutzerkennung/Loginname) # //CY = Aktuelles Jahr (vierstellige Zahl) # //CQ = Aktuelles Quartal (einstellige Zahl) # //CM = Aktueller Monat (zweistellige Zahl) # //CW = Aktuelle Woche (zweistellige Zahl) # //CD = Aktueller Tag (zweistellige Zahl) # //RY = Empfangsjahr (vierstellige Zahl) # //RQ = Empfangsquartal (einstellige Zahl) # //RM = Empfangsmonat (zweistellige Zahl) # //RW = Empfangswoche (zweistellige Zahl) # //RD = Empfangstag (zweistellige Zahl) # # Die Bedingung in der Zeile "condition = ..." muss genau eines der folgenden # drei Woerter enthalten, die folgende Bedeutungen haben: # # exists = Es gibt mindestens eine Kopfzeile mit diesem Feldnamen. # (Die "data"-Zeilen werden ignoriert.) # contains = Eine Kopfzeile mit diesem Feldnamen enthaelt die Zeichenkette, # die in der "data"-Zeile bzw. in einer der "data"-Zeilen # angegeben ist. # until = Eine Kopfzeile mit diesem Feldnamen enthaelt ein Datum, das # das nicht spaeter liegt als das Datum in der "data"-Zeile. # (Bei Received-Zeilen wird nur der Teil hinter dem letzten # Semikolon betrachtet.) # # Ausserdem darf die Zeile "condition" beliebig viele der folgenden Woerter # enthalten, die die Bedeutung obiger Woerter wie folgt abwandeln: # # first = Nur die erste Kopfzeile mit diesem Feldnamen wird beachtet. # last = Nur die letzte Kopfzeile mit diesem Feldnamen wird beachtet. # raw = Nicht der MIME-dekodierte, sondern der Roh-Inhalt der Kopfzeile # wird beachtet. # address = Nur die in der Zeichenkette enthaltenen E-Mail-Adressen # werden beachtet, nicht die gesamte Zeichenkette. # not = Die Regel wird erfuellt, wenn die Bedingung nicht zutrifft. # ignore = Beim Vergleich der Zeichenketten wird Grosskleinschreibung # nicht beachtet. # noaccent = Beim Vergleich der Zeichenketten werden Akzente nicht beachtet. # ascii = Wie noaccent, ausserdem werden alle anderen 8-Bit-Zeichen als # '#' beachtet. # regex = Die "data"-Zeile enthaelt einen erweiterten regulaeren Ausdruck # (POSIX extended regular expression, erweitert um oktal oder # hexadezimal angegebene Zeichen \O, \OO, \OOO oder \xXX). # ### Nicht-ISO-8859-1-Zeichen koennen zwar angegeben werden, # werden aber niemals gefunden, da die verwendete Regex-Bibliothek # nur mit 8-Bit-Zeichen umgehen kann. # word = Eine Zeichenkette gilt nur dann als gefunden, wenn sie an der # Fundstelle (ggf. nach Beachtung von "noaccent" oder "ascii") # nicht von Buchstaben A-Z oder a-z begrenzt wird. # #============================================================================= # # Es folgen verschiedene Beispiele. # #============================================================================= #============================================================================= # # Regelsatz fuer einen Monatsordner-Filter # ======================================== # # E-Mails, die aelter als zehn Tage sind und sich in bestimmten Ordnern # befinden, werden in Monatsordner wegsortiert. # Monatsordner zu einem Ordner XXXX tragen den Namen JJJJ-MM-XXXX, # dabei stellt JJJJ-MM die Monatsangabe dar. # E-Mails aus dem Posteingang sollen abweichend in den gleichen Ordnern # landen wie die E-Mails aus der Gesendet-Ablage (saved-messages). # # Folgende Flaggen werden verwendet: # # A Die E-Mail ist abzulegen, falls sie aelter als zehn Tage ist # R Die E-Mail enthaelt eine Received-Zeile # #============================================================================= # Fuer den Fall, dass diese Regeln in umfangreichere Regeln eingebaut # werden, werden zuerst einmal die Flaggen A und R gesenkt. # Kopfzeilen existieren in allen E-Mails. # Daher trifft die Bedingung "field =" "condition = exists" immer zu. field = condition = exists setflags = ar # Die nachfolgenden Regeln sollen nur in bestimmten Ordnern ausgefuehrt # werden. (Weitere Ordner koennen durch weitere Zeilen "current = ... " # angegeben werden.) Setze die A-Flagge in diesen Ordnern. # Die A-Flagge wird hinterher festlegen, welche E-Mails abzulegen sind. field = current = current = saved-messages current = decrypted-messages condition = exists setflags = A # Bei empfangenen E-Mails soll nach dem Empfangsdatum sortiert werden. # Empfangene E-Mails werden daran erkannt, dass es eine Received-Zeile # gibt. Setze die R-Flagge fuer diese E-Mails. field = Received ifflags = A condition = exists setflags = R # Lege 10 Tage alte empfangene E-Mails (R-Flagge gesetzt) ab. # Vorab der Sonderfall fuer den Posteingang (current =). field = Received current = ifflags = AR condition = first until data = -10d folder = //RY-//RM-saved-messages field = Received ifflags = AR condition = first until data = -10d folder = //RY-//RM-//CF # Lege 10 Tage alte verschickte E-Mails (R-Flagge gesenkt) ab. # Vorab der Sonderfall fuer den Posteingang (current =). field = Date current = ifflags = Ar condition = first until data = -10d folder = //RY-//RM-saved-messages field = Date ifflags = Ar condition = first until data = -10d folder = //RY-//RM-//CF # Fuer den Fall, dass diese Regeln in umfangreichere Regeln eingebaut # werden, werden abschliessend alle verwendeten Flaggen wieder gesenkt. field = condition = exists setflags = ar #============================================================================= # # Regelsatz fuer einen Adressen-Filter # ==================================== # # E-Mails von und an bestimmte Absendern werden in entsprechende Ordner # wegsortiert. # Nachteil: Bei mehreren Adressen zaehlt nur die erste aus folgender Liste. # # Folgende Flagge wird verwendet: # # R Die E-Mail enthaelt eine Received-Zeile # #============================================================================= # Fuer den Fall, dass diese Regeln in umfangreichere Regeln eingebaut # werden, wird zuerst einmal die Flagge R gesenkt. # Kopfzeilen existieren in allen E-Mails. # Daher trifft die Bedingung "field =" "condition = exists" immer zu. field = condition = exists setflags = r # Hisse R-Flagge fuer alle E-Mails mit Received-Zeile. # Diese E-Mails sind offensichtlich eingegangene E-Mails. # Alle anderen E-Mails sind abgeschickte E-Mails. field = Received condition = exists setflags = R # Eingegangene E-Mails von hans@example.com field = From ifflags = R condition = contains address ignore word data = hans@example.com folder = Hans # Ausgehende E-Mails an hans@example.com field = To ifflags = r condition = contains address ignore word data = hans@example.com folder = Hans field = Cc ifflags = r condition = contains address ignore word data = hans@example.com folder = Hans # Eingegangene E-Mails von anne@example.com field = From ifflags = R condition = contains address ignore word data = anne@example.com folder = Anne # Ausgehende E-Mails an anne@example.com field = To ifflags = r condition = contains address ignore word data = anne@example.com folder = Anne field = Cc ifflags = r condition = contains address ignore word data = anne@example.com folder = Anne # Fuer den Fall, dass diese Regeln in umfangreichere Regeln eingebaut # werden, werden abschliessend alle verwendeten Flaggen wieder gesenkt. field = condition = exists setflags = r