Wiki-Quellcode von Sieve Filterregeln

Zuletzt geändert von Aysegül Omus am 2024/04/05 12:56

Verstecke letzte Bearbeiter
Aysegül Omus 8.1 1 = =
wikibot 1.1 2
3 {{toc/}}
4
5
6
Aysegül Omus 8.1 7 == 1. Syntax ==
Xhulia Jasimi 2.1 8
Aysegül Omus 8.1 9 === 1.1. Vergleiche ===
wikibot 1.1 10
11 Sieve kennt insgesamt 6 Vergleiche, davon 3 String Vergleiche (Text) und 3 Integer Vergleiche (Zahlen).
12
13 String Vergleiche:
Xhulia Jasimi 2.1 14
wikibot 1.1 15 * **:is** bedeutet, dass der Inhalt des verglichenen Feldes dem angegebenen Wert **exakt gleichen** muss.
16 * **:contains** bewirkt, dass die Bedingung erfüllt ist, wenn das **Schlüsselwort** im verglichenen Feld **enthalten** ist.
Xhulia Jasimi 2.1 17 * **:matches** bedeutet, dass das verglichene 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.
18
wikibot 1.1 19 Integer Vergleiche:
Xhulia Jasimi 2.1 20
wikibot 1.1 21 * **:over** bedeutet, dass der Wert des Feldes **über** dem angegebenen liegen muss.
22 * **:under** bedeutet, dass der Wert des Feldes **unter** dem angegebenen liegen muss.
23 * **:count** zählt die **Anzahl der Werte** im angegebenen Feld.
Xhulia Jasimi 2.1 24
wikibot 1.1 25 Zusätzlich kann noch geprüft werden, ob ein bestimmtes Feld im Header vorhanden ist:
26
Xhulia Jasimi 3.1 27 * **: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.
Xhulia Jasimi 2.1 28
Aysegül Omus 8.1 29 === 1.2. Kontrollstrukturen und Blöcke ===
wikibot 1.1 30
31 Um Fallunterscheidungen zu treffen versteht Sieve die üblichen **if**, **else**, **elsif** Strukturen:
Xhulia Jasimi 2.1 32
wikibot 1.1 33 * **if** bedeutet, dass die im darauffolgenden Block festgelegten Aktionen ausgeführt werden, wenn die angegebene Bedingung erfüllt ist.
Xhulia Jasimi 3.1 34 * **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.
35 * **elsif** kombiniert eine //"else"// - mit einer //"if"// Struktur und ist wie eine //\"if\"// Struktur in einem //"else"// Block zu verstehen.
36 * **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.
37 * **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.
wikibot 1.1 38 * **not ...** negiert die darauffolgende Bedingung.
Xhulia Jasimi 3.1 39 * **[ ... ]** dient zur **Auflistung von Elementen**, z.B. einer String-Liste: ["Max", "Martin", "Manuel"] .
wikibot 1.1 40 * **{ ... }** dient zur Abgrenzung eines **Aktionsblocks**.
41
Aysegül Omus 8.1 42 === 1.3. Felder ===
wikibot 1.1 43
44 Folgende Felder stehen für Vergleiche zur Verfügung:
Xhulia Jasimi 2.1 45
Xhulia Jasimi 3.1 46 * **:header** Dieses Feld ist wohl das vielfältigste, da es Zugriff auf **sämtliche Header-Felder** ermöglicht. Benötigt **keine "require"** Anweisung.
47 * **: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.
48 * **:size** Dieses Feld ermöglicht einen Vergleich der Größe der E-Mail. Benötigt **keine "require"** Anweisung.
wikibot 1.1 49
Aysegül Omus 8.1 50 === 1.4. Aktionen ===
wikibot 1.1 51
Xhulia Jasimi 3.1 52 **stop;** dient zum **Beenden** der Ausführung des Skripts. Benötigt **keine "require"** Anweisung.
Xhulia Jasimi 2.1 53
Xhulia Jasimi 3.1 54 * **reject " ... ";** bewirkt, dass die E-Mail **an den Absender zurückgesendet** 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**.
55 * **discard;** bewirkt, dass die E-Mail **unwiderruflich gelöscht** wird, ohne den Absender zu informieren. Benötigt **keine "require"** Anweisung, diese wird jedoch **empfohlen**.
56 * **keep;** bewirkt, dass die E-Mail **im Standard-Ordner gespeichert** wird. Überschreibt eine eventuell vorangehende //discard// Aktion. Benötigt **keine "require"** Anweisung.
57 * **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.
58 * **redirect " ... ";** bewirkt, dass die E-Mail **umgeleitet** wird. Die Zieladresse wird in Anführungszeichen angegeben. Benötigt **keine "require"** Anweisung, diese wird jedoch **empfohlen**.
wikibot 1.1 59
Aysegül Omus 8.1 60 === 1.5. Diverses ===
wikibot 1.1 61
Xhulia Jasimi 3.1 62 **Einzeilige Kommentare** werden mit einem **'#'** eingeleitet. **Mehrzeilige Kommentare** werden mit **"/*"  begonnen und mit "*/" **beendet.
wikibot 1.1 63
64 Einige Funktionen müssen zu Beginn des Skripts noch explizit eingebunden werden. Das geht mit einer **require** Anweisung.
65
66 Beispiel:
67
68
69 {{html wiki="true"}}
Xhulia Jasimi 3.1 70 {{code}}require ["fileinto", "reject"];
wikibot 1.1 71 {{/code}}
72 {{/html}}
73
Aysegül Omus 8.1 74 == 2. Beispiele ==
wikibot 1.1 75
Aysegül Omus 8.1 76 === 2.1. Einfache Beispiele ===
wikibot 1.1 77
Xhulia Jasimi 3.1 78 Das folgende Beispiel sortiert alle E-Mails **von** einer der 3 angegebenen Adressen in der Ordner "freunde" ein:
wikibot 1.1 79
80
81 {{html wiki="true"}}
Xhulia Jasimi 4.1 82 {{code}}if address :is :all "**From**" ["bob@example.com", "alice@example2.com", "bff@somewhere.de"] {
83 fileinto "INBOX.freunde";
wikibot 1.1 84 }
85 {{/code}}
86 {{/html}}
87
Xhulia Jasimi 4.1 88 Dieses Beispiel zeigt die Nutzung einer //"if"// Struktur, des //"address"// Feldes, eines exakten Vergleichs mittels //":is"// und einer Liste in //"[ ... ]"//, sowie der //"fileinto"// Aktion.
wikibot 1.1 89
90 Es ist auch möglich im Betreff nach Schlüsselwörtern zu suchen:
91
92
93 {{html wiki="true"}}
Xhulia Jasimi 6.1 94 {{code}}if header :contains "subject" "Facebook" {
wikibot 1.1 95 discard;
96 }
97 {{/code}}
98 {{/html}}
99
100 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.
101
Xhulia Jasimi 4.1 102 Das folgende Beispiel **lehnt** E-Mails** ab**, die größer als **1MB** sind:
wikibot 1.1 103
104
105 {{html wiki="true"}}
Xhulia Jasimi 6.1 106 {{code}}if size :over 1M {
107 reject "Bitte sehen Sie davon ab, mir E-Mails mit großen Anhängen zu senden, da mein Mail-Speicher begrenzt ist.";
wikibot 1.1 108 }
109 {{/code}}
110 {{/html}}
111
112
Aysegül Omus 8.1 113 === 2.2. Verschieben von Spam-Mails in einen eigenen Ordner ===
wikibot 1.1 114
115
116 {{html wiki="true"}}
Xhulia Jasimi 4.1 117 {{code}}if header :contains "X-Spam-Level" "*******" {
Xhulia Jasimi 6.1 118 # Wenn der Spam als gelesen markiert werden soll:
119 # addflag "\\Seen";
wikibot 1.1 120
Xhulia Jasimi 4.1 121 fileinto "INBOX.Junk";
wikibot 1.1 122 }
123 {{/code}}
124 {{/html}}
125
Aysegül Omus 8.1 126 === 2.3. Ignorieren bestimmter E-Mails ===
wikibot 1.1 127
128
129 {{html wiki="true"}}
Xhulia Jasimi 4.1 130 {{code}}if address "From" "virusalert@informatik.tu-muenchen.de" {
wikibot 1.1 131 discard;
132 }
133 {{/code}}
134 {{/html}}
135
Aysegül Omus 8.1 136 === 2.4. Weiterleiten oder Verschieben nach Betreff ===
wikibot 1.1 137
138
139 {{html wiki="true"}}
Xhulia Jasimi 4.1 140 {{code}}if header :contains "subject" "my_project" {
wikibot 1.1 141 # Zum Verschieben in einen Ordner
Xhulia Jasimi 4.1 142 # fileinto "INBOX.project";
wikibot 1.1 143
144 # Zum Weiterleiten mit lokaler Kopie
Xhulia Jasimi 4.1 145 redirect :copy "me@example.com";
wikibot 1.1 146
147 # Zum Weiterleiten ohne lokale Kopie
Xhulia Jasimi 4.1 148 # redirect "me@example.com";
wikibot 1.1 149 }
150 {{/code}}
151 {{/html}}
152
153 Zu weiteren Informationen bezüglich Weiterleitungen, lesen Sie bitte [[hier>>Informatik.Helpdesk.IntumMatumEmailWeiterleitungAbwesenheitsnotiz]] nach.
154
Aysegül Omus 8.1 155 === 2.5. Sortieren nach Adress-Zusätzen ===
wikibot 1.1 156
157
158 {{html wiki="true"}}
Xhulia Jasimi 4.1 159 {{code}}require ["mailbox"];
wikibot 1.1 160
Xhulia Jasimi 5.1 161 if envelope :matches "to" "*+abc@*" {
162 # Legt den entsprechenden Ordner automatisch an, sofern er noch nicht existiert und verschiebt, die E-Mail, die an *+abc@* kommen dorthin.
163 fileinto :create "INBOX.abc";
wikibot 1.1 164 }
165 {{/code}}
166 {{/html}}