сценарий сита регулярных выражений не соответствует

У меня проблема на почтовом сервере 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». Но по какой-то причине вся почта вместо этого накапливается в папке «Входящие».

Сценарий запускается, и у меня нет ошибок в моих журналах, поэтому я, должно быть, допустил ошибку в самом скрипте.

1
задан 1 March 2018 в 18:35
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;
    }
}

Как заметил Эндрю Шульман, кажется, что "существует" - это чувствительно к регистру. После исправления я столкнулся с ошибкой в логах. В регексе

([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.])
0
ответ дан 4 December 2019 в 04:13

В 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;
    }
}
0
ответ дан 4 December 2019 в 04:13

Теги

Похожие вопросы