Regex-Sieve-Skript stimmt nicht überein

Regex-Sieve-Skript stimmt nicht überein

Ich habe ein Problem auf einem Dovecot2-Mailserver mit einem Sieve-Skript, das ich schreibe. Das Skript sollte E-Mails aus einer Mailingliste automatisch in einen Ordner verschieben (nach Listennamen, nicht nach Listen-ID).

require ["fileinto", "mailbox", "variables", "regex"];
if exists "list-id" {
    if header :regex "list-id" "([a-zA-Z0-9][a-zA-Z0-9-_. ]+[a-zA-Z0-9.])" {
        fileinto :create "${1}";
        stop;
    }
}

Für eine Mail mit dem Header

List-Id: RZ Monitoring <rz-monitoring.lists.example.com>

Dieses Skript sollte alle E-Mails in den Ordner „RZ Monitoring“ verschieben. Aus irgendeinem Grund stapeln sich die E-Mails jedoch im Posteingang.

Das Skript wird ausgeführt und ich habe keine Fehler in meinen Protokollen, also muss mir im Skript selbst ein Fehler unterlaufen sein.

Antwort1

DerDovecot-Siebdokumenteist mir nicht ganz klar – ich denke, Sie müssten sich in die RFCs einlesen – aber ich denke, der existsOperator ist case-sensitiv, obwohl :regexdies nicht der Fall ist. Sie sollten also List-Idstatt verwenden list-id:

if exists "List-Id" {
    if header :regex "List-Id" "([a-zA-Z0-9][a-zA-Z0-9-_. ]+[a-zA-Z0-9.])" {
        fileinto :create "${1}";
        stop;
    }
}

Antwort2

Also hat folgendes funktioniert:

require ["fileinto", "mailbox", "variables", "regex"];
if exists "List-Id" {
    if header :regex "List-Id" "([a-zA-Z0-9][a-zA-Z0-9\\-_. ]+[a-zA-Z0-9.])" {
        fileinto :create "${1}";
        stop;
    }
}

Wie Andrew Schulman bemerkte, scheint es, dass bei „exists“ zwischen Groß- und Kleinschreibung unterschieden wird. Nachdem ich dies behoben hatte, stieß ich auf einen Fehler in den Protokollen. Im regulären Ausdruck

([a-zA-Z0-9][a-zA-Z0-9-_. ]+[a-zA-Z0-9.])
                      ^

Dieses "-" wird als Bereich von "9" bis "_" interpretiert, was nicht gültig ist (obwohl es nach meinem Verständnis von Regex nicht gültig sein sollte. Möglicherweise eine Eigenart der Regex-Implementierung von Dovecots). Daher muss das "-" hier maskiert werden

([a-zA-Z0-9][a-zA-Z0-9\\-_. ]+[a-zA-Z0-9.])

verwandte Informationen