私が書いたふるいスクリプトでdovecot2メールサーバーに問題があります。スクリプトは、メーリングリストからのメールを(リスト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;
}
}
ヘッダー付きのメールの場合
List-Id: RZ Monitoring <rz-monitoring.lists.example.com>
このスクリプトは、すべてのメールを「RZMonitoring」フォルダに移動する必要があります。しかし、何らかの理由で、代わりにすべてのメールが受信トレイに蓄積されています。
スクリプトが実行されており、ログにエラーがないため、スクリプト自体に誤りがあったに違いありません。
したがって、以下が機能しました。
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;
}
}
Andrew Schulmanが指摘したように、「存在する」は大文字と小文字を区別するようです。これを修正した後、ログにエラーが発生しました。正規表現で
([a-zA-Z0-9][a-zA-Z0-9-_. ]+[a-zA-Z0-9.])
^
この「-」は「9」から「_」までの範囲として解釈されますが、これは無効です(正規表現についての私の理解では、そうではありません。おそらく、ダブコットの正規表現の実装の癖です)。したがって、ここの「-」はエスケープする必要があります
([a-zA-Z0-9][a-zA-Z0-9\\-_. ]+[a-zA-Z0-9.])
Dovecot sieve docs これについては明確ではありません-RFCを掘り下げる必要があると思います-しかし、exists
演算子は大文字と小文字が区別されますが、:regex
ではありません。したがって、List-Id
の代わりに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;
}
}