wiki.in.tum.de
Technische Universität München
You are here: Foswiki>Informatik/Helpdesk Web>IntumEmailFilterregeln (31 Oct 2018, AyseguelOmusNe63guq)Edit Attach

Filterregeln in Sieve

1 Syntax

1.1 Vergleiche:

Sieve kennt insgesamt 6 Vergleiche, davon 3 String Vergleiche (Text) und 3 Integer Vergleiche (Zahlen).

String Vergleiche:
  • :is bedeutet, dass der Inhalt des verglichenen Feldes dem angegebenen Wert exakt gleichen muss.
  • :contains bewirkt, dass die Bedingung erfüllt ist, wenn das Schlüsselwort im verglichenen Feld enthalten ist.
  • :matches bedeutet, dass das verglichenen Feld dem angegebenen wildcard Ausdruck entsprechen muss, also mit '?' (exakt ein Charakter) und '*' (0 bis unendlich viele Charaktere). Um normale '?' und '*' müssen Sie "\\?" und "\\*" schreiben.
Integer Vergleiche:
  • :over bedeutet, dass der Wert des Feldes über dem angegebenen liegen muss.
  • :under bedeutet, dass der Wert des Feldes unter dem angegebenen liegen muss.
  • :count zählt die Anzahl der Werte im angegebenen Feld.
Zusätzlich kann noch geprüft werden, ob ein bestimmtes Feld im Header vorhanden ist:
  • :exists prüft ob ein Feld im Header gesetzt ist und ist besonders sinnvoll in Kombination mit dem "not" -Operator z.B. um zu testen ob ein Betreff gesetzt ist.

1.2 Kontrollstrukturen

Um Fallunterscheidungen zu treffen versteht Sieve die üblichen if, else, elsif Strukturen:
  • if bedeutet, dass die im darauffolgenden Block festgelegten Aktionen ausgeführt werden, wenn die angegebene Bedingung erfüllt ist.
  • else kann nach einer "if" -Struktur stehen und die im darauffolgenden Block festgelegten Aktionen werden ausgeführt, wenn die Bedingung der vorangehenden if-Struktur nicht erfüllt ist.
  • elsif kombiniert eine "else" - mit einer "if" -Struktur und ist wie eine "if" -Struktur in einem "else" -Block zu verstehen.

  • allof ( … ) stellt eine Verknüpfung mehrerer Bedingungen dar und ist dann erfüllt, wenn alle "Unterbedingungen" erfüllt sind (Und-Verknüpfung). Diese werden als durch Kommata getrennte Liste in den Klammern angegeben.
  • anyof ( … ) stellt eine Verknüpfung mehrerer Bedingungen dar und ist dann erfüllt, wenn mindestens eine "Unterbedingung" erfüllt sind (Oder-Verknüpfung). Diese werden als durch Kommata getrennte Liste in den Klammern angegeben.
  • not ... negiert die darauffolgende Bedingung.

  • [ … ] dient zur Auflistung von Elementen, z.B. einer String-Liste: ["Max", "Martin", "Manuel"] .
  • { … } dient zur Abgrenzung eines Aktionsblocks.

1.3 Felder

Folgende Felder stehen für Vergleiche zur Verfügung:
  • :header Dieses Feld ist wohl das vielfältigste, da es Zugriff auf sämtliche Header-Felder ermöglicht. Benötigt keine "require" -Anweisung.
  • :address Dieses Feld gibt direkten zugriff auf alle Adress-Felder des Headers. Es Unterstützt mindestens die From, To, Cc, Bcc, Sender, Resent-From, Resent-To Felder und implementierungsabhängig eventuell auch weitere. Benötigt keine "require" -Anweisung.
  • :size Dieses Feld ermöglicht einen Vergleich der Größe der E-Mail. Benötigt keine "require" -Anweisung.

1.4 Aktionen

  • stop; dient zum beenden der Ausführung des Skripts. Benötigt keine "require" -Anweisung.
  • reject " … "; bewirkt, dass die E-Mail an den Absender zurück gesendet wird. Zwischen den Anführungszeichen kann eine Nachricht eingetragen werden, die dieser Bekommt, z.B. der Grund für die Ablehnung. Benötigt keine "require" -Anweisung, diese wird jedoch empfohlen.
  • discard; bewirkt, dass die die E-Mail unwideruflich gelöscht wird, ohne den Absender zu informieren. Benötigt keine "require" -Anweisung, diese wird jedoch empfohlen.
  • keep; bewirkt, dass die E-Mail im standard-Ordner gespeichert wird. Überschreibt eine eventuell vorangehende discard -Aktion. Benötigt keine "require" -Anweisung.
  • fileinto " … "; bewirkt, dass die E-Mail im angegebenen Ordner gespeichert wird. Zwischen die Anführungszeichen wird der Ordnername eingetragen. Falls der Ordner nicht existiert, wird die Nachricht im Standard-Ordner gespeichert und es werden keine weiteren Aktionen ausgeführt. Benötigt eine "require" -Anweisung.
  • redirect " … "; bewirkt, dass die E-Mail umgeleitet wird. Die Zieladresse wird in Anführungszeichen angegeben. Benötigt keine "require" -Anweisung, diese wird jedoch empfohlen.

1.5 Diverses

Einzeilige Kommentare werden mit einem '#' eingeleitet. Mehrzeilige Kommentare werden mit "/*" begonnen und mit "*/" beendet.

Einige Funktionen müssen zu beginn des Skripts noch explizit eingebunden werden. Das geht mit einer require -Anweisung.

Beispiel:

require ["fileinto", "reject"];

2 Beispiele

2.1 Einfache Beispiele

Das folgende Beispiel sortiert alle E-Mails von einer der 3 angegebenen Adressen in der Ordner "freunde" ein:

if address :is :all "From" ["bob@example.com", "alice@example2.com", "bff@somewhere.de"] {
    fileinto "INBOX.freunde";
}

Dieses Beispiel zeigt die Nutzung einer "if" -Struktur, des "address" -Feldes, eines exakten Vergleichs mittels ":is" und einer Liste in "[ … ]" , sowie der "fileinto" -Aktion.

Es ist auch möglich im Betreff nach Schlüsselwörtern zu suchen:

if header :contains "subject" "facebook" {
    discard;
}

Diese Regel hat zur Folge, dass alle E-Mails, deren Betreff das Schlüsselwort "facebook" enthalten einfach gelöscht werden, da sie definitiv Spam sind.

Das folgende Beispiel lehnt E-Mails ab, die größer als 1MB sind:

if size :over 1M {
    reject "Bitte sehen Sie davon ab, mir E-Mails mit großen Anhängen zu senden, da mein Mail-Speicher begrent ist.";
}

2.2 Verschieben von Spam-Mails in einen eigenen Ordner

if header :contains "X-Spam-Level" "*******" {
     # Wenn der Spam als gelesen markiert werden soll:
     # addflag "\\Seen";

     fileinto "INBOX.Junk";
}

2.3 Ignorierern bestimmter E-Mails

if address "From" "virusalert@informatik.tu-muenchen.de" {
     discard;
}

2.4 Weiterleiten oder Verschieben nach Betreff

if header :contains "subject" "my_project" {
    # Zum verschiebenen in einen Ordner
    # fileinto "INBOX.project";

    # Zum Weiterleiten mit lokaler Kopie
    redirect :copy "me@example.com";

    # Zum weiterleitgen ohne lokale Kopie
    # redirect "me@example.com";
}

Zu weiteren Informationen bezüglich weiterleitungen, lesen Sie bitte hier nach.

2.5 Sortieren nach Adress-Zusätzen

require ["mailbox"];

if envelope :matches "to" "*+abc@*" {
    # Legt den entsprechenden Ordner automatisch an, sofern er noch nicht existiert und verschiebt, die E-Mail,die an *+abc@* kommen dorthin.
    fileinto :create "INBOX.abc";
}
Topic revision: r5 - 31 Oct 2018, AyseguelOmusNe63guq
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback