sieve: odd part

Feb 20, 2014 15:34

Давно уже использую sieve для раскладывания личной почты по папочкам, но только недавно наткнулся на спрятанные грабли неочевидный момент. Две очень похожих конструкции работают по разному.
Условие
address :is "From" [
"do-not-reply@example.ru",
"webmaster@example.org"
],
истинно, если в заголовке From адрес do-not-reply@example.ru ИЛИ webmaster@example.org.

Я думал что похожее на вид условие
exists ["X-BeenThere", "List-Post"]
тоже сработает при наличии в письме любого из указанных заголовков. Но оказалась что exists работает наоборот - условие истинно, если в письме есть заголовки X-BeenThere И List-Post.

В итоге чтобы получить нужный мне эффект написал
header :matches ["X-BeenThere", "List-Post"] "?*"

Хорошо, что в составе Pigeonhole Sieve есть утилита sieve-test. Если набор правил работает не так как нужно, то можно запустить

sieve-test -t debug.log -Tlevel=matching -a me@example.ru sieve.script saved_mail.msg

и посмотреть почему именно. Без неё пришлось бы наверно RFC от корки до корки перечитывать. В те времена, когда приходилось использовать cyrus sieve такой утилиты мне сильно не хватало.

dovecot, sieve, mail

Previous post Next post
Up