У меня проблема на почтовом сервере dovecot2 с написанным мной скриптом sieve. Скрипт должен автоматически перемещать почту, приходящую из списка рассылки, в папку (по имени списка, а не по идентификатору списка)
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». Но по какой-то причине вся почта вместо этого накапливается в папке «Входящие».
Сценарий запускается, и у меня нет ошибок в моих журналах, поэтому я, должно быть, допустил ошибку в самом скрипте.
Так что сработало:
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;
}
}
Как заметил Эндрю Шульман, кажется, что "существует" - это чувствительно к регистру. После исправления я столкнулся с ошибкой в логах. В регексе
([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 - но я думаю, что оператор существует
и чувствителен к регистру, хотя :regex
- не чувствителен. Поэтому вместо 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;
}
}