Скрипт для Dovecot Sieve

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Скрипт для Dovecot Sieve

Непрочитанное сообщение mr. brightside » 2012-08-29 16:55:26

Добрый день, уважаемые!

ОС: FreeBSD 9

Навесил плагин к локальному доставщику давкота.

Скрипт следующего содержания:

Код: Выделить всё

require "fileinto";
if anyof (header :contains "Subject" "SPAM")
{
   redirect "spam@mydomain.ru";
}
else
{
   keep;
}	
Отсылаю письмо с темой SPAM, чтобы проверить, как сие работает.

Получаю возврат, т.е. письмо не доходит, а возвращается адресату.

При этом, если тема письма валидная, то все замечательно.

В Логах следующее:

Тут мы письмо получили:

Код: Выделить всё

Aug 29 13:52:35 deliver(test): Info: Loading modules from directory: /usr/local/lib/dovecot/lda
Aug 29 13:52:35 deliver(test): Info: Module loaded: /usr/local/lib/dovecot/lda/lib90_sieve_plugin.so
Aug 29 13:52:35 deliver(test): Info: maildir: data=/usr/home/test/.maildir
Aug 29 13:52:35 deliver(test): Info: maildir++: root=/usr/home/test/.maildir, index=, control=, inbox=/usr/home/test/.maildir
Aug 29 13:52:35 deliver(test): Info: sieve: user's script path /usr/home/test/.dovecot.sieve doesn't exist (using global script path in stead)
Aug 29 13:52:35 deliver(test): Info: sieve: user has no valid personal script
Aug 29 13:52:35 deliver(test): Info: sieve: executed before user's script(1): /usr/local/lib/dovecot/lda/before.sieve
Aug 29 13:52:35 deliver(test): Info: sieve: opening script /usr/local/lib/dovecot/lda/before.sieve
Aug 29 13:52:35 deliver(test): Info: sieve: executing compiled script /usr/local/lib/dovecot/lda/before.sieve
Aug 29 13:52:35 deliver(test): Info: sieve: mail from test@mydomain.ru: forwarded to <spam@mydomain.ru>
Aug 29 13:52:35 deliver(spam): Info: Loading modules from directory: /usr/local/lib/dovecot/lda
Aug 29 13:52:35 deliver(spam): Info: Module loaded: /usr/local/lib/dovecot/lda/lib90_sieve_plugin.so
Aug 29 13:52:35 deliver(spam): Info: maildir: data=/usr/home/spam//.maildir
Aug 29 13:52:35 deliver(spam): Info: maildir++: root=/usr/home/spam//.maildir, index=, control=, inbox=/usr/home/spam//.maildir
Aug 29 13:52:35 deliver(spam): Info: sieve: user's script path /usr/home/spam//.dovecot.sieve doesn't exist (using global script path in stead)
Aug 29 13:52:35 deliver(spam): Info: sieve: user has no valid personal script
Aug 29 13:52:35 deliver(spam): Info: sieve: executed before user's script(1): /usr/local/lib/dovecot/lda/before.sieve
Aug 29 13:52:35 deliver(spam): Info: sieve: opening script /usr/local/lib/dovecot/lda/before.sieve
Aug 29 13:52:35 deliver(spam): Info: sieve: executing compiled script /usr/local/lib/dovecot/lda/before.sieve
Aug 29 13:52:35 deliver(spam): Info: sieve: mail from test@mydomain.ru: forwarded to <spam@mydomain.ru>	
И далее пошла попытка пересылки:

Код: Выделить всё

Aug 29 13:52:36 deliver(test): Info: Loading modules from directory: /usr/local/lib/dovecot/lda
Aug 29 13:52:36 deliver(test): Info: Module loaded: /usr/local/lib/dovecot/lda/lib90_sieve_plugin.so
Aug 29 13:52:36 deliver(test): Info: maildir: data=/usr/home/test/.maildir
Aug 29 13:52:36 deliver(test): Info: maildir++: root=/usr/home/test/.maildir, index=, control=, inbox=/usr/home/test/.maildir
Aug 29 13:52:36 deliver(test): Info: sieve: user's script path /usr/home/test/.dovecot.sieve doesn't exist (using global script path in stead)
Aug 29 13:52:36 deliver(test): Info: sieve: user has no valid personal script
Aug 29 13:52:36 deliver(test): Info: sieve: executed before user's script(1): /usr/local/lib/dovecot/lda/before.sieve
Aug 29 13:52:36 deliver(test): Info: sieve: opening script /usr/local/lib/dovecot/lda/before.sieve
Aug 29 13:52:36 deliver(test): Info: sieve: executing compiled script /usr/local/lib/dovecot/lda/before.sieve
Aug 29 13:52:36 deliver(test): Info: Namespace : Using permissions from /usr/home/test/.maildir: mode=0700 gid=-1
Aug 29 13:52:36 deliver(test): Info: sieve: mail from MAILER-DAEMON@mydomain.ru: stored mail into mailbox 'INBOX'	
Т.е. в итоге он отдал письмо Даймону и тот положил письмо адресату.

Смотрим в отчет о доставке и видим:

Код: Выделить всё

<spam@mydomain.ru>: mail forwarding loop for spam@mydomain.ru
В принципе понятно, откуда луп. Письмо пересылается на spam и снова проверяется заголовок. Как переписать скрипт так, чтобы если письмо отправлено на spam@mydomain.ru, то проверки исключались. Я написал нечто такое, но оно не пашет:

Код: Выделить всё

require "fileinto";
if address :is "to" "spam@mydomain.ru" {
   stop;
} elsif anyof (header :contains "Subject" "SPAM") {
   redirect "spam@mydomain.ru";
} else {
   keep;
}
Помогите со скриптом, пожалуйста...
Только FreeBSD, только хардкор

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
bitman
рядовой
Сообщения: 38
Зарегистрирован: 2008-08-29 14:35:29

Re: Скрипт для Dovecot Sieve

Непрочитанное сообщение bitman » 2012-09-26 14:34:45

попробуй разделить обработку - сделать в 2 последовательных правила:

Код: Выделить всё

# rule:[test]
if header :is "To" "spam@mydomain.ru"
{
	stop;
}
# rule:[test2]
if header :contains "Subject" "SPAM"
{
	redirect "spam@mydomain.ru";
	stop;
}
кроме того, я не уверен в слове address:

Код: Выделить всё

if address :is "to" "spam@mydomain.ru" {

Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Re: Скрипт для Dovecot Sieve

Непрочитанное сообщение mr. brightside » 2012-11-15 16:59:55

Ваш код также не работает:

Код: Выделить всё

spam@mydomain.ru: mail forwarding loop for spam@mydomain.ru
Пока что продолжаю складывать письма во вложенную папку spam в папке каждого ящика. Сие не удобно, но увы и ах.

Попытался класть письма просто в папку по абсолютному пути - тоже не сработало.

Как видно из истории (а вернее даты) отправки постов сюда - это не является критичным =)
Однако, разобраться бы хотелось бы. Получу валидный код, - выкину сюда
Только FreeBSD, только хардкор

Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Re: Скрипт для Dovecot Sieve

Непрочитанное сообщение mr. brightside » 2012-12-12 10:33:34

Решил вернуться и отписаться о решении

Написал скрипт, который раз в сутки перемещает письма из папок SPAM, которые есть в ящике каждого юзера.

Т.е. схема такая получилась:

Письмо приходит, проверяется на спам. Если оно спамовое, то по скрипту для dovecot-lda кладется в папку SPAM папки адресата.

Туда же в течение суток сами юзеры кидают спамовые письма, которые были не распознаны спамассасином (IMAP).

Раз в сутки (ночью) скрипт перемещает файли из "спамовых" папок в один отстойник. После этого запускается по скрипту обучалка спамассассина.

Осталось придумать, откуда брать false positives для обучения HAMa спамассасину. Пока у меня false positives не наблюдается.

Может у кого есть архивчик с парой тысечей false positives? =)
Только FreeBSD, только хардкор

Stalker127
проходил мимо

Скрипт для Dovecot Sieve

Непрочитанное сообщение Stalker127 » 2016-05-17 12:13:39

Получилось складывать спам в одну папку? Если да то как???

Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Скрипт для Dovecot Sieve

Непрочитанное сообщение mr. brightside » 2016-05-17 12:24:24

Получилось, но пост датирован 2010м годом =)

Напишите скрипт, который будет проходить по ящикам пользователей (по папкам Spam) и перемещать их в нужную Вам папку. Bash-скрипт положить куда-нибудь, желательно, наверное в /usr/bin и запускать по крону.

В конец скрипта (когда перемещение завершено) запускать обучалку.

Я давно уже этим не занимаюсь, если что, готовые скрипты найти не смогу, к сожалению.
Только FreeBSD, только хардкор

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Скрипт для Dovecot Sieve

Непрочитанное сообщение xM » 2016-05-17 12:35:58

Если у вас Dovecot, то вам будет, наверняка, полезно - https://kostikov.co/post/otlozhennoe-pa ... ya-dovecot
IT voodoo blog https://kostikov.co