Добрый день, чаще всего рекомундуется, чтобы пользователи обучали спаму фильтры следующим образом: В каждом почтовом ящике создается папка Spam (тип Junk) Далее через плагин imap_sieve мы смотрим, если письма перемещаются в эту папку, то считаем их спамом и вызываем сркипт (в данном случае spam.sh)
require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];
if environment :matches "imap.user" "*" {
set "username" "${1}";
}
pipe :copy "spam.sh" [ "${username}-spam" ];
Если это нормальные письма, то при перемещении ИЗ папка spam в любую другую считаем их ham и вызываем скрипт ham.sh
require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];
if environment :matches "imap.mailbox" "*" {
set "mailbox" "${1}";
}
if string "${mailbox}" "Trash" {
stop;
}
if environment :matches "imap.user" "*" {
set "username" "${1}";
}
pipe :copy "ham.sh" [ "${username}-ham" ];
Так вот вопрос, каким образом это адекватно работает? Ведь письма после фильтра, которые набрали средние очки обычно помещаются во входящие с пометкой SPAM.Если это реально спам, мы их перемещаем в папку Spam, тут все логично. Но что делать если SPAM получило нормальное письмо? Чтобы сработал скрипт ham нужно же их поместить сначала в папку spam а потом оттуда переместить в другую, и получается два вызова скрипта на одно письмо (и spam и ham).