我在使用我編寫的 sieve 腳本的 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>
此腳本應將所有郵件移至資料夾「RZ Monitoring」。但由於某種原因,所有郵件都堆積在收件匣中。
腳本正在執行,我的日誌中沒有錯誤,所以我一定在腳本本身中犯了錯誤。
答案1
這鴿舍篩文檔不清楚這一點 - 我認為你必須深入研究 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;
}
}
答案2
所以以下工作有效:
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」到「_」的範圍,這是無效的(儘管根據我對正則表達式的理解,它不應該。可能是 dovecots 正則表達式實現的怪癖)。所以這裡的「-」必須轉義
([a-zA-Z0-9][a-zA-Z0-9\\-_. ]+[a-zA-Z0-9.])