Пробовала так:
uRCPTLIST 0! S" newaddr" AddRcpt TRUE
— Работает, но проверка другими фильтрами продолжается.uRCPTLIST 0! S" emal@addr" AddRcpt FALSE
— Не работает, т.к. письмо остается в SPOOL, в журнале обрыв сразу после "DELIVERY" (правильного). В ящик письмо не попадает.setRcpt newaddr
— Работает, но и другие фильтры срабатывают тоже. Как еще попробовать?
В E4 у вас рычагов еще больше — acSMTP\conf\OnStartup.rules.txt
ред: 24.12.2010 11:48
Вообще вот у меня вот такая ситуация, которую уже здесь обсуждали: Есть "черный" список отправителей, который проверяется в фильтре со стадией "mailfrom" и в нем выдается smtpRefuse closeConnection FALSE.
Все здорово, но часть почты у нас приходит на ящик, с которого делается редирект на домен. И в этом редиректнутом письме mailfrom уже испорченный. Поэтому сделала еще один фильтр со стадией dataend и прверкой заголовка From с теми же параметрами команды. Тут тоже все здорово, фильтр срабатывает, но не он один. Перед этим срабатывает еще и архив, и на спам, и возможно еще какие-то. Хотя письмо точно "плохое", и его сразу надо выкидывать и никому не показывать. Конечно, тут получается все навороченно: при получении после очередного фильтра положит. рез-та нельзя сразу выполнять команду, а надо дождаться, не будет ли следующим фильтром выдано "вето", и только после этого все делать. Уффф...
Оно конечно, но в Е2 все это проще было. )) И примеров полно в readme.
Конкретно: есть фильтр стадии mailfrom. При срабатывании хочу заменить получателей и отправить письмо по новому адресу. Другими фильтрами обрабатывать уже не надо. Делаю так:
Все срабатывает, но и остальные фильтры тоже. Если поставить FALSE, то процесс обрывается, письмо никуда не доставляется (ситуация описана выше). Как выкрутиться? Вообще, ситуация, когда могут требоваться разные комбинации фильтров, у меня возникает регулярно. Хорошо бы придумать механизм управления этими фильтрами. Ну или способ решения проблемы ( OnStartup.rules.txt лопатить не хочется )))))
Спасибо.
FALSE именно прерывает обработку фильтров. Процесс обрывается, т.к. от фильтра на этой стадии ожидается какой-то ответ клиенту, а простое AddRcpt влияет только на внутренний список получателей, но ничего не говорит клиенту. Добавьте в команду (после AddRcpt перед TRUE) следующее:
ред: 22.05.2012 14:41
Письмо не спамное. Неправильно что-то в правиле записала?
А чем управлять... Ну вот мне кажется, было бы удобным задавать в одном фильтре набор команд (действий), например, добавить/заменить получателей и установить одновременно какой-нибудь флаг. И этот флаг, например, проверять в фильтрах следующей стадии. Пользоваться runInternal — надо знать правила языка, неудобно.
Про флаги — можно сделать... Там достаточно одного безымянного флага или нужно несколько. Если второе, то как удобнее — нумеровать их или дать возможность присваивать имена? Не усложнить бы весь процесс для тех, кому флаги не нужны.
Про флаги, конечно, усложнять не хочется, чтобы не запутаться. Я бы для начала предложила сделать возможность установки одного параметра, типа: param="value".
А в условиях фильтра добавить поле для проверки значения этого параметра с возможностью выбора оператора OR или AND, типа: AND param="value". Тогда можно на всех этапах проверки выставлять какие-то пометки и анализировать эти пометки на следующих этапах фильтров. Надо получше подумать, над тем, что именно нужно реализовать. Я постараюсь сформулировать почетче проблему.
Спасибо!
Спасибо!
ред: 23.05.2012 15:09
А можно в фильтре использовать команду setclass, присвоив определенное значение параметру, а потом, в следующих фильтрах, проверить этот параметр на равенство этому значению в пункте "правило"? И если да, как это правильно записать? (присвоение внутри команды runinternal и проверку в строке "правило")
Вторая строка возвращает TRUE, если класс равен указанному.
А можно управлять порядком применения фильтров одинаковой стадии? У меня такая задача: весь спам фильтром направляется на один лок.ящик. Но есть несколько адресатов, чья почта должна быть отправлена строго им, в т.ч. и спамная. Я могу на этапе "RCPT TO" проверить адресата и приписать соответствующий класс этому письму. И сделать фильтр этапа "bayes", в котором проверить наличие этого класса и при совпадении отправить письмо по правильному адресу и избежать остальные проверки. Но если первым сработает другой "bayes"-фильтр, который весь спам отправляет в общую кучу, то все мои потуги будут напрасны. Вот как тут быть? Надеюсь, понятно изложила.
А вообще фильтры обрабатываются в том порядке, в котором они следуют в списке.
ред: 25.05.2012 12:25
И все, больше "62685;636" не встречается. Заметила это только на письмах "CLASS;spam", у других — сеанс нормально заканчивается, так же как и у некоторых "CLASS;spam". Разницу в завершенных "спамах" и "недоделанных" найти пока не могу. Это вообще важно? Пишу в этой теме, потому что заметила эту странность после своих исправлений в фильтрах (установка класса и проверка). Может, из-за них, но закономерности не вижу.
Ну эта галочка в учетной записи — она ведь "по-человечная", т.е. так и работает: кому-то спам идёт в inbox, а кому-то в папку spam...
ред: 29.05.2012 09:10
создал e5\conf\lists\smtp\FromEmailWhiteList.txt
но не работает, все равно проверяет на спам и заворачивает
Присутствует. Там список фильтров, и любой из них может быть белым элементом.
Практически любое поле в фильтре может вместо одного значения (email'а, например) содержать имя файла со списком значений.