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 exists
Operator ist case-sensitiv, obwohl :regex
dies nicht der Fall ist. Sie sollten also List-Id
statt 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.])