URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 89878
[ Назад ]

Исходное сообщение
"требуеться небольшая помощь написать правило exim"

Отправлено Moreh , 24-Сен-10 08:50 
И так задача состоит в том что бы фильтровать письма на несуществующие адреса и перенаправять их на ящик error@local.domain, средствами system filter
Вот я сделал такое правило

Код: Выделить всё • Развернуть
if $recipients match "@local.domain"
then
if $recipients match "${lookup mysql{SELECT `goto` FROM `alias` WHERE \
                   `address`='$recipients' and `active`='1'}}"
then
else
seen deliver error@local.domain
finish
endif
endif


Понятно что оно немного не логичное, но уж только так работает оно я хз почему. Проблема в том что оно работает, если во втором случае match поменять на is, но тогда письма где в адресатах указан не один получатель, а два и более(а также те, где адресат указан с именем в <> скобках) тоже попадают в error. А в первом случае всё работает хорошо, только письма на не существующие адреса не уходят в еррор :). Прошу помощи как модифицировать правило, что бы работало так как нужно.


Содержание

Сообщения в этом обсуждении
"требуеться небольшая помощь написать правило exim"
Отправлено SubGun , 24-Сен-10 10:24 
Такое правило отобьет письмо, если хотя бы один адрес в списке получателей не существует. Используйте фильтрацию по "Envelope-to:". Думаю сами разберетесь на каком этапе появляется это поле в заголовках)

"требуеться небольшая помощь написать правило exim"
Отправлено Moreh , 24-Сен-10 10:41 
>Такое правило отобьет письмо, если хотя бы один адрес в списке получателей
>не существует. Используйте фильтрацию по "Envelope-to:". Думаю сами разберетесь на каком
>этапе появляется это поле в заголовках)

где же мне взять переменную которая соответствует полю Envelope-to


"требуеться небольшая помощь написать правило exim"
Отправлено Moreh , 24-Сен-10 10:54 
Envelope-to: system-filter
вот что содержит, не пойму что по этому полю можно фильтровать


"требуеться небольшая помощь написать правило exim"
Отправлено SubGun , 24-Сен-10 11:00 
>Envelope-to: system-filter
>вот что содержит, не пойму что по этому полю можно фильтровать

Ну почитайте вы про это поле.
http://exim.org

Exim’s transports have an option for adding an Envelope-to: header to a message when it is delivered, in exactly the same way as Return-path: is handled. Envelope-to: records the original recipient address from the messages’s envelope that caused the delivery to happen. Such headers should not be present in incoming messages, and this option causes them to be removed at the time the message is received, to avoid any problems that might occur when a delivered message is subsequently sent on to some other recipient.


"требуеться небольшая помощь написать правило exim"
Отправлено Moreh , 24-Сен-10 11:34 
>Exim’s transports have an option for adding an Envelope-to: header to a
>message when it is delivered, in exactly the same way as
>Return-path: is handled. Envelope-to: records the original recipient address from the
>messages’s envelope that caused the delivery to happen. Such headers should
>not be present in incoming messages, and this option causes them
>to be removed at the time the message is received, to
>avoid any problems that might occur when a delivered message is
>subsequently sent on to some other recipient.

Ну насколько я понял, поле формируеться непосредственно при доставке получателю и должно якобы содержать единственного получателя, кому в данный момент письмо отправляется.
Но если учитывать, что системный фильтр выполняется самым первым,  до отправки, скажем так то поле не должно сформироваться, почему в нём написано system_filter для меня загадка..
И как может помоч это поле если системный фильтр  выполняется раньше чем должно сформироваться это поле :) Можно мне объяснить пожалуйста.


"требуеться небольшая помощь написать правило exim"
Отправлено SubGun , 27-Сен-10 15:52 
router1:
    driver = redirect
    domains = +local_domains
    message = User unknown!
    data = mail1@domain.ru

Поставьте последним роутером.


"требуеться небольшая помощь написать правило exim"
Отправлено Moreh , 28-Сен-10 17:16 
> router1:
>     driver = redirect
>     domains = +local_domains
>     message = User unknown!
>     data = mail1@domain.ru
> Поставьте последним роутером.

так бы это подошло, но дело в том что в системном фильтре который выполняется раньше секции роутеров выполняется копирование входящих писем в ящик admin@local.domain. И получиться что сначала письмо скопируется в админ, а потом  отправиться назад, что соотвецтвенно не нужно потому что это письмо  получиться с ошибкой и должно будет отправиться на другой ящик error@local.domain
Надеюсь как то понятно описал :)


"требуеться небольшая помощь написать правило exim"
Отправлено SubGun , 29-Сен-10 11:48 
> так бы это подошло, но дело в том что в системном фильтре
> который выполняется раньше секции роутеров выполняется копирование входящих писем в ящик
> admin@local.domain. И получиться что сначала письмо скопируется в админ, а потом
>  отправиться назад, что соотвецтвенно не нужно потому что это письмо
>  получиться с ошибкой и должно будет отправиться на другой ящик
> error@local.domain
> Надеюсь как то понятно описал :)

Слушайте, ну не заставляйте все разжевывать. Я привел пример, а вы доработайте. Хотите, поставьте туда проверку наличия пользователя в базе, вставьте роутер в нужное место. Все элементарно.


"требуеться небольшая помощь написать правило exim"
Отправлено Moreh , 30-Сен-10 14:05 
> Слушайте, ну не заставляйте все разжевывать. Я привел пример, а вы доработайте.
> Хотите, поставьте туда проверку наличия пользователя в базе, вставьте роутер в
> нужное место. Все элементарно.

Спасибо :) кое что прояснил для себя одна проблемка осталась

    driver = redirect
    unseen
    condition = ${if eq{} {${lookup mysql{SELECT goto FROM alias \
                WHERE (`address`='${quote_mysql:$local_part@$domain}' OR \
                       `address`='${quote_mysql:@$domain}') AND \
                       active='1'}}}{no}{yes}}
    data = admink@local.domain

вот этот роутер работает на вх. и исх. почту можно ли его как то модифицировать, что бы он работал тольно на входящую? ничего подобного не нашёл в гугле!
Или же  ничего не остаётся, как делать в секции транспортов копирование почты входящей



"требуеться небольшая помощь написать правило exim"
Отправлено zerot , 30-Сен-10 14:13 
р работает на вх. и исх. почту можно ли его
> как то модифицировать, что бы он работал тольно на входящую? ничего
> подобного не нашёл в гугле!
> Или же  ничего не остаётся, как делать в секции транспортов копирование
> почты входящей

правильнее думать в категориях, что вся почта - входящая, а потом маршрутизируется далее
.
вы вполне можете написать правило, по которому роутер будет обрабатывать почту только с ваших локальных доменов, а ниже добавить другой именованый роутер, который наоборот будет обрабатывать почту только с НЕ локальных доменов, или же всех, не захваченных предыдущим
.
русскоязычная документация по эксиму доступна у лисяры на сайте
.
удачи


"требуеться небольшая помощь написать правило exim"
Отправлено Moreh , 01-Окт-10 10:56 
> вы вполне можете написать правило, по которому роутер будет обрабатывать почту только
> с ваших локальных доменов, а ниже добавить другой именованый роутер, который
> наоборот будет обрабатывать почту только с НЕ локальных доменов, или же
> всех, не захваченных предыдущим
> .
> русскоязычная документация по эксиму доступна у лисяры на сайте
> .
> удачи

как мне можно проверить валидность получателя кроме как роутерром accept??
не могу найти инфу, если  аналог переменной $sender_address для получателя в роутере redirect?