Sieve – Mails in variable Ordnernamen verschieben

Wir haben bei uns in der Firma Email-Adressen in der Form Vorname.Nachname@firma.de. Ich möchte für jeden Absender einen eigenen Email-Ordner anlegen und eingehende Mails automatisch dort einsortieren lassen.

Nun könnte ich das sicherlich manuell mit entsprechenden Outlook/Thunderbird-Filtermechanismen hinbekommen, aber der Pflegeaufwand bei meiner doch recht hohen Anzahl an Kollegen ist mir deutlich zu hoch.

Die Lösung für dieses Problem heisst „Sieve“.

Nun ist Sieve von Hause aus ja statisch und ich möchte eben nicht für jeden Kollegen eine Regel in der Art:

if address "From" "horst.schlemmer@firma.de"
{
fileinto :create "Schaetzelein";
stop;
}

anlegen und verwalten müssen.

Zum Glück gibt es für Sieve die Erweiterung „variables“, die ihrem Namen alle Ehre macht.

Ich lege daher dieses Skript an:

require ["fileinto", "mailbox", "variables"];
if address :matches "From" "*.*@firma.de"
{
set :lower :upperfirst "Benutzer" "${2}";
fileinto :create "${Benutzer}";
stop;
}

Was macht dieses Skript? Unsere Emailadressen haben wie oben geschrieben die Form „Vorname.Nachname@firma.de“.  Die Skriptzeile

if address :matches "From" "*.*@firma.de"

macht nun nicht anderes als zu schauen ob der Absender von der Domain firma.de kommt und der lokale Teil die Form <irgendwas1><Punkt><irgendwas2> hat. Ist dies der Fall, dann wird in der Variable ${1} der für den ersten Stern passende Teil (in unserem Fall also der Vorname) gespeichert und in der Variable ${2} der zweite Stern hinter dem Punkt (bei uns also der Nachname) gespeichert.

Beim Absender „horst.schlemmer@firma.de“ ist danach also folgende Variablenbelegung vorhanden:

${1} = horst
${2} = schlemmer

In der Zeile

set :lower :upperfirst "Benutzer" "${2}";

weise ich ${2} der Variable ${Benutzer} zu, wobei ich der schöneren Optik halber eine komplette Umwandlung in Kleinbuchstaben vornehme, den Anfangsbuchstaben allerdings als Großbuchstabe festlege.

Die Variablen sehen also jetzt so aus:

${1} = horst
${2} = schlemmer
${Benutzer} = Schlemmer

Mit

fileinto :create "${Benutzer}";

lasse ich die Mail nun tatsächlich in den Ordner „Nachnamen“ verschieben, wobei dieser bei Bedarf angelegt wird, sofern er noch nicht existieren sollte.