Регистрация...

Eserv Forum / E4 / Mail / Фильтры

wikipost // (v1)
Продукты и услуги Скачать Документация Купить Поддержка Форумы Партнёрам Статьи О компании
Нужен фильтр, который при срабатывании заменял бы получателей и останавливал бы проверку другими фильтрами.
Пробовала так:
uRCPTLIST 0! S" newaddr" AddRcpt TRUE
— Работает, но проверка другими фильтрами продолжается.
uRCPTLIST 0! S" emal@addr" AddRcpt FALSE
— Не работает, т.к. письмо остается в SPOOL, в журнале обрыв сразу после "DELIVERY" (правильного). В ящик письмо не попадает.
setRcpt newaddr
— Работает, но и другие фильтры срабатывают тоже.
Как еще попробовать?
 
Комментарии к этой версии (17.11.2010 14:22) [~matveeva] ad7c4f4c
АвторДатаТекстtags
matveeva23.12.2010 11:07
Все-таки хотелось бы как-то управлять фильтрами: сделать приоритет и возможность прерывать дальнейшую проверку. Сейчас опять столкнулась с тем, что срабатывает несколько фильтров, а надо бы только один...
wikipost
ac23.12.2010 22:28
Этот фильтр на какой стадии протокола запускаете? Прерывать дальнейшую проверку надо на той же стадии или вообще всех фильтров этой сессии?
wikipost
matveeva24.12.2010 10:54
Тот, о котором вверху говорится — стадия "bayes". Прерывать хотелось бы совсем. Типа включать право "вето" при срабатывании некоторых фильтров. Т.е. , если письмо попало под такой фильтр, то надо выполнить указанную команду (напр., заменить получателей) и больше ничего с письмом не делать, в том числе не проверять остальные фильтры. А еще хорошо бы контролировать порядок применения этих фильтров. В Е2 было удобно в файле правил тоссинга расположить проверки в нужном порядке и в каких-то случаях использовать cut.
wikipost
ac24.12.2010 11:24
Bayes фактически последним и выполняется. Отменить он может разве что выдачу SMTP-ответов в конце команды DATA. Или имеются в виду другие фильтры той же стадии bayes?

matveeva пишет: В Е2 было удобно в файле правил тоссинга расположить проверки в нужном порядке и в каких-то случаях использовать cut.

В E4 у вас рычагов еще больше — acSMTP\conf\OnStartup.rules.txt
wikipost
matveeva24.12.2010 11:35
ред: 24.12.2010 11:48
ac пишет: Или имеются в виду другие фильтры той же стадии bayes?
Да, именно.
Вообще вот у меня вот такая ситуация, которую уже здесь обсуждали: Есть "черный" список отправителей, который проверяется в фильтре со стадией "mailfrom" и в нем выдается smtpRefuse closeConnection FALSE.
Все здорово, но часть почты у нас приходит на ящик, с которого делается редирект на домен. И в этом редиректнутом письме mailfrom уже испорченный. Поэтому сделала еще один фильтр со стадией dataend и прверкой заголовка From с теми же параметрами команды. Тут тоже все здорово, фильтр срабатывает, но не он один. Перед этим срабатывает еще и архив, и на спам, и возможно еще какие-то. Хотя письмо точно "плохое", и его сразу надо выкидывать и никому не показывать. Конечно, тут получается все навороченно: при получении после очередного фильтра положит. рез-та нельзя сразу выполнять команду, а надо дождаться, не будет ли следующим фильтром выдано "вето", и только после этого все делать. Уффф...
ac пишет: В E4 у вас рычагов еще больше — acSMTP\conf\OnStartup.rules.txt
Оно конечно, но в Е2 все это проще было. )) И примеров полно в readme.
wikipost
matveeva21.05.2012 08:59
Еще раз возвращаюсь к вопросу управления фильтрами. Сейчас опять возникла ситуация, когда письмо, после срабатывания определенного фильтра, не должно больше обрабатываться другими фильтрами.
Конкретно: есть фильтр стадии mailfrom. При срабатывании хочу заменить получателей и отправить письмо по новому адресу. Другими фильтрами обрабатывать уже не надо. Делаю так:
runInternal uRCPTLIST 0! S" Новый@Адрес" AddRcpt TRUE

Все срабатывает, но и остальные фильтры тоже. Если поставить FALSE, то процесс обрывается, письмо никуда не доставляется (ситуация описана выше). Как выкрутиться? Вообще, ситуация, когда могут требоваться разные комбинации фильтров, у меня возникает регулярно. Хорошо бы придумать механизм управления этими фильтрами. Ну или способ решения проблемы ( OnStartup.rules.txt лопатить не хочется )))))
Спасибо.
wikipost
ac22.05.2012 11:45
matveeva пишет: Если поставить FALSE, то процесс обрывается

FALSE именно прерывает обработку фильтров. Процесс обрывается, т.к. от фильтра на этой стадии ожидается какой-то ответ клиенту, а простое AddRcpt влияет только на внутренний список получателей, но ничего не говорит клиенту. Добавьте в команду (после AddRcpt перед TRUE) следующее:
" 250 {MAILFROM} OK{CRLF}" SMTP_FPUTS_DB
wikipost
matveeva22.05.2012 12:41
Спасибо, попробую. А вообще планируется ли создание механизма управления фильтрами?
wikipost
ac22.05.2012 13:05
А чем именно там надо управлять?
wikipost
matveeva22.05.2012 14:39
ред: 22.05.2012 14:41
Вот это получилось при срабатывании:
2012-05-22 15:17:16;194.67.1.204;@;56906;1180;IN;MAIL FROM:<ХХ@ХХ.ru> SIZE=58297 2012-05-22 15:17:16;194.67.1.204;@;56906;1180;FILTER;ХХ@ХХ.ru;;;matveeva;mailfrom 2012-05-22 15:17:16;194.67.1.204;@;56906;1180;OUT;550 denied (filter, uRCPTLIST 0! S" АА@АА.ru" AddRcpt " 250 {MAILFROM} OK{CRLF}" SMTP_FPUTS_DB TRUE) 2012-05-22 15:17:16;194.67.1.204;@;56906;1180;IN;QUIT 2012-05-22 15:17:16;194.67.1.204;@;56906;1180;OUT;221 Goodbye.

Письмо не спамное. Неправильно что-то в правиле записала?
А чем управлять... Ну вот мне кажется, было бы удобным задавать в одном фильтре набор команд (действий), например, добавить/заменить получателей и установить одновременно какой-нибудь флаг. И этот флаг, например, проверять в фильтрах следующей стадии. Пользоваться runInternal — надо знать правила языка, неудобно.
wikipost
ac22.05.2012 15:37
Нет, мы же хотели FALSE вместо TRUE поставить — чтобы прерывалась обработка фильтров.

Про флаги — можно сделать... Там достаточно одного безымянного флага или нужно несколько. Если второе, то как удобнее — нумеровать их или дать возможность присваивать имена? Не усложнить бы весь процесс для тех, кому флаги не нужны.
wikipost
matveeva22.05.2012 16:36
Ага, ставлю FALSE.
Про флаги, конечно, усложнять не хочется, чтобы не запутаться. Я бы для начала предложила сделать возможность установки одного параметра, типа: param="value".
А в условиях фильтра добавить поле для проверки значения этого параметра с возможностью выбора оператора OR или AND, типа: AND param="value". Тогда можно на всех этапах проверки выставлять какие-то пометки и анализировать эти пометки на следующих этапах фильтров. Надо получше подумать, над тем, что именно нужно реализовать. Я постараюсь сформулировать почетче проблему.
Спасибо!
wikipost
matveeva23.05.2012 09:07
С FALSE-ом тоже не так работает, доставка не происходит.
2012-05-22 22:06:29;77.88.61.37;@;57949;2452;IN;MAIL FROM:<XX@XX.ru> SIZE=18440 2012-05-22 22:06:29;77.88.61.37;@;57949;2452;FILTER;XX@XX.ru;;;matveeva;mailfrom 2012-05-22 22:06:29;77.88.61.37;@;57949;2452;OUT;550 denied (filter, uRCPTLIST 0! S" YY@YY.ru" AddRcpt " 250 {MAILFROM} OK{CRLF}" SMTP_FPUTS_DB FALSE) 2012-05-22 22:06:29;77.88.61.37;@;57949;2452;IN;RSET 2012-05-22 22:06:29;77.88.61.37;@;57949;2452;OUT;250 Reset state 2012-05-22 22:06:29;77.88.61.37;@;57949;2452;IN;QUIT 2012-05-22 22:06:29;77.88.61.37;@;57949;2452;OUT;221 Goodbye.
wikipost
ac23.05.2012 09:36
Я проверял, доставка происходит. У вас скорее всего runInternal заменилось на smtpRefuse, т.е. вместо "Выполнить команды" работает "Отказаться выполнять команду".
wikipost
matveeva23.05.2012 09:38
БЛИН Точно! Опять колдун, однако! Там эти поля такие коварные, ткнешь в них, чтобы список посмотреть, и значение меняется. Когда-то замечаю и восстанавливаю, а когда-то нет.
Спасибо!
wikipost
matveeva23.05.2012 12:39
Остальные фильтры все-таки проверяются... Что-то еще забыла?
2012-05-23 13:00:48;194.67.1.204;@;59952;2216;IN;MAIL FROM:<XX@XX.ru> SIZE=52475 2012-05-23 13:00:48;194.67.1.204;@;59952;2216;FILTER;XX@XX.ru;;;matveeva;mailfrom 2012-05-23 13:00:48;194.67.1.204;@;59952;2216;OUT;250 XX@XX.ru OK 2012-05-23 13:00:48;194.67.1.204;@;59952;2216;IN;RCPT TO:<YY@YY.ru> ... 2012-05-23 13:01:19;194.67.1.204;@;59952;2216;OUT;250 YY@YY.ru OK, ExDelivery:LocalHA, a=L 2012-05-23 13:01:19;194.67.1.204;@;59952;2216;IN;DATA 2012-05-23 13:01:19;194.67.1.204;@;59952;2216;SPOOL;..\DATA\mail\spool\XX@xx.ru!59952!1693354968!1.eml 2012-05-23 13:01:19;194.67.1.204;@;59952;2216;OUT;354 send the mail data, end with . 2012-05-23 13:01:20;194.67.1.204;@;59952;2216;WL;51238 2012-05-23 13:01:20;194.67.1.204;@;59952;2216;WL;700000 2012-05-23 13:01:20;194.67.1.204;@;59952;2216;WL;-1 2012-05-23 13:01:20;194.67.1.204;@;59952;2216;WL;-1 2012-05-23 13:01:20;194.67.1.204;@;59952;2216;WL;-1 2012-05-23 13:01:20;194.67.1.204;@;59952;2216;WL;-1 2012-05-23 13:01:20;194.67.1.204;@;59952;2216;WL;-1 2012-05-23 13:01:20;194.67.1.204;@;59952;2216;WL;-1 2012-05-23 13:01:20;194.67.1.204;@;59952;2216;WL;-1 2012-05-23 13:01:20;194.67.1.204;@;59952;2216;WL;-1 2012-05-23 13:01:22;194.67.1.204;@;59952;2216;CLASS;clear 2012-05-23 13:01:22;194.67.1.204;@;59952;2216;FILTER;XX@XX.ru;YY@YY.ru;;FILTER_NAME;bayes 2012-05-23 13:01:22;194.67.1.204;@;59952;2216;FILTER;XX@XX.ru;YY@YY;;FILTER_NAME;bayes 2012-05-23 13:01:22;194.67.1.204;@;59952;2216;OUT;250 OK message accepted for delivery (alias or copy) 2012-05-23 13:01:22;194.67.1.204;@;59952;2216;ARCHIVE;XX@XX.ru;ZZ@ZZ.ru;ExDelivery:Archive 2012-05-23 13:01:22;194.67.1.204;@;59952;2216;INDEX;7858 2012-05-23 13:01:22;194.67.1.204;@;59952;2216;DELIVERY;AA@AA.ru; 2012-05-23 13:01:22;194.67.1.204;@;59952;2216;DELIVERY;SS@SS.ru; 2012-05-23 13:01:22;194.67.1.204;@;59952;2216;INDEX;5084 2012-05-23 13:01:22;194.67.1.204;@;59952;2216;DELIVERY;YY@YY.ru;ExDelivery:LocalHA 2012-05-23 13:01:22;194.67.1.204;@;59952;2216;INDEX;6824 2012-05-23 13:01:22;194.67.1.204;@;59952;2216;DELIVERY;QQ@QQ.ru; 2012-05-23 13:01:22;194.67.1.204;@;59952;2216;INDEX;210 2012-05-23 13:01:22;194.67.1.204;@;59952;2216;IN;QUIT 2012-05-23 13:01:23;194.67.1.204;@;59952;2216;OUT;221 Goodbye.
wikipost
ac23.05.2012 14:29
Отменяются фильтры только той же стадии (MAILFROM в данном случае).
wikipost
matveeva23.05.2012 14:58
ред: 23.05.2012 15:09

А можно в фильтре использовать команду setclass, присвоив определенное значение параметру, а потом, в следующих фильтрах, проверить этот параметр на равенство этому значению в пункте "правило"? И если да, как это правильно записать? (присвоение внутри команды runinternal и проверку в строке "правило")
wikipost
ac23.05.2012 15:27
S" classname" SetMessageClass


MESSAGE-CLASS S" classname" COMPARE 0=


Вторая строка возвращает TRUE, если класс равен указанному.
wikipost
matveeva23.05.2012 15:31
OK, спасибо. Сейчас попробую.
wikipost
matveeva23.05.2012 16:57
А чтобы строка возвращала FALSE в случае равенства и TRUE при неравенстве, надо написать
MESSAGE-CLASS S" classname" COMPARE 0<>
?
wikipost
ac23.05.2012 17:42
Можно просто убрать "0=" после COMPARE. Сам COMPARE возвращает ноль (FALSE) при равенстве строк и 1/-1 при неравенстве в зависимости от того, в какую сторону неравенство. При этом ненулевое значение трактуется как TRUE.
wikipost
matveeva24.05.2012 11:51
Спасибо, с этим ясно.
А можно управлять порядком применения фильтров одинаковой стадии? У меня такая задача: весь спам фильтром направляется на один лок.ящик. Но есть несколько адресатов, чья почта должна быть отправлена строго им, в т.ч. и спамная. Я могу на этапе "RCPT TO" проверить адресата и приписать соответствующий класс этому письму. И сделать фильтр этапа "bayes", в котором проверить наличие этого класса и при совпадении отправить письмо по правильному адресу и избежать остальные проверки. Но если первым сработает другой "bayes"-фильтр, который весь спам отправляет в общую кучу, то все мои потуги будут напрасны. Вот как тут быть? Надеюсь, понятно изложила.
wikipost
ac24.05.2012 12:13
А может в данном случае просто поставить галочку "доставлять спам в inbox" для этих особенных учеток?

А вообще фильтры обрабатываются в том порядке, в котором они следуют в списке.
wikipost
matveeva24.05.2012 12:19
О! А я и не знала (забыла) про такую опцию. Спасибо, воспользуюсь! Но тогда это спамное письмо все равно "окучится" "bayes"-фильтром, который отправит его в общую кучу спама? Задача не только отдать человеку всю его почту, в том числе и спам, но и не отдать ее другому в случае спама. Во как!
wikipost
matveeva25.05.2012 12:24
ред: 25.05.2012 12:25
Вот еще странность такая, обратила внимание, что при приеме каких-то писем отсутствуют заключительные строки сеанса. Т.е. выглядит так:
2012-05-24 10:22:05;123.138.202.52;@;62685;636;ARCHIVE;pennsylvaniatf5@rambler.ru;XXX@XXX.ru;ExDelivery:Archive 2012-05-24 10:22:05;123.138.202.52;@;62685;636;INDEX;4501 2012-05-24 10:22:05;123.138.202.52;@;62685;636;DELIVERY;XXX@XXX.ru; 2012-05-24 10:22:05;123.138.202.52;@;62685;636;INDEX;9169

И все, больше "62685;636" не встречается. Заметила это только на письмах "CLASS;spam", у других — сеанс нормально заканчивается, так же как и у некоторых "CLASS;spam". Разницу в завершенных "спамах" и "недоделанных" найти пока не могу. Это вообще важно? Пишу в этой теме, потому что заметила эту странность после своих исправлений в фильтрах (установка класса и проверка). Может, из-за них, но закономерности не вижу.
wikipost
ac25.05.2012 13:14
Ну в принципе клиент (отправляющий MTA или спамерский софт) может отключиться без QUIT, получив 5xx в ответ на отправку письма, на доставку это не влияет, т.к. по QUIT в SMTP (в отличие от POP3) никаких специальных действий не производится.
wikipost
ac25.05.2012 13:16
matveeva пишет: Задача не только отдать человеку всю его почту, в том числе и спам, но и не отдать ее другому в случае спама.

Ну эта галочка в учетной записи — она ведь "по-человечная", т.е. так и работает: кому-то спам идёт в inbox, а кому-то в папку spam...
wikipost
matveeva25.05.2012 13:44
ОК, спасибо. Буду дальше смотреть
wikipost
asm29.05.2012 09:09
ред: 29.05.2012 09:10
а по какой причине в GUI отсутствует возможность заполнения белых списков (отправителей/получателей)? (интерфейс текущих фильтров до безобразия неудобен, особенно для большого количества записей). Посмотрел конфиг onstartuprules, там, вроде, осталась от Е3 возможность задать файл со списком белых отправителей, но не работает

создал e5\conf\lists\smtp\FromEmailWhiteList.txt

EMAIL;REPLY_TEXT *@xxx.com;"xxx is our partner"


но не работает, все равно проверяет на спам и заворачивает
wikipost
ili_a29.05.2012 10:19
asm пишет: но не работает, все равно проверяет на спам и заворачивает
возможно отсутствие кавычек в первом случае сказывается, попробуйте
"*@xxx.com";"xxx is our partner"
У меня RBLWhiteList.txt работает.
wikipost
ac29.05.2012 12:15
asm пишет: а по какой причине в GUI отсутствует возможность заполнения белых списков (отправителей/получателей)?

Присутствует. Там список фильтров, и любой из них может быть белым элементом.

asm пишет: возможность задать файл со списком белых отправителей

Практически любое поле в фильтре может вместо одного значения (email'а, например) содержать имя файла со списком значений.
wikipost
Работает на Eserv/5.05567 (10.02.2020)