Страница 1 из 1

проверка получателя в exim

Добавлено: 2008-03-25 18:10:41
ashgdw
В конфиге есть такая проверка:

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

accept domains = +local_domains
endpass
verify = recipient
Судя по документации, проверяется получатель принадлежащий к локальному домену. А откуда exim берет информацию о получателях??? Где в документации про это написано?

Делаю конфиг для пересылки входящей почты на другой хост. И у меня не проходит эту проверку. Конфиг дефолтный, только после nslookup роутера добавлен:

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

manualroute:
  driver = manualroute
  local_parts = lsearch;/usr/local/etc/exim/users.list
  domains =  +local_domains
  transport = remote_smtp
  route_list = 192.168.254.4
Спасибо.

Re: проверка получателя в exim

Добавлено: 2008-03-25 18:47:07
dikens3
А откуда exim берет информацию о получателях???
http://www.lissyara.su/?id=1239#39.31
Роутеры могут детектировать различие....
P.S. Роутеры этим занимаются.

Re: проверка получателя в exim

Добавлено: 2008-03-25 19:59:13
ashgdw
Ок, большое спасибо. :) Я так понял, получатель проверяется через роутер accept? Т.к. с manualroute такое не прокатило. :(

Re: проверка получателя в exim

Добавлено: 2008-03-26 0:05:19
dikens3
Роутеры проверяются сверху вниз. Вообще есть debug (exim -bhc 192.168.x.x и т.д.)

Re: проверка получателя в exim

Добавлено: 2008-03-26 17:37:46
ashgdw
Это понятно. Не понятно, как в моем случае, с роутером manulroute делать проверку получателя. На ум приходит только создать вместо роутера manualroute соответствующий транспорт, который указать в роутере accept.

Re: проверка получателя в exim

Добавлено: 2008-03-27 11:31:47
cyrus_user
ashgdw писал(а):Это понятно. Не понятно, как в моем случае, с роутером manulroute делать проверку получателя. На ум приходит только создать вместо роутера manualroute соответствующий транспорт, который указать в роутере accept.
например добавить до вашего роутера manualroute, роутер redirect, где в data проверить наличие получателя. пример:

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

rcpt_check_router:
no_verify
driver = redirect
data  = "${lookup юзера где нам надо} {$local_part@$domain} {:fail: RCPT unknown}}"

Re: проверка получателя в exim

Добавлено: 2008-03-27 13:12:44
Laa
Здравствуйте.

Новый пост, но в тему.

Прошу прощения, но туплю и не могу оптимизировать два кондишена.

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

        accept domains          = +local_domains : +relay_to_domains
                verify          = recipient
                message         = Unknown account <$local_part@$domain>
                log_message     = Unknown account <$local_part@$domain>
                endpass

        drop    !verify         = recipient
                domains         = +local_domains : +relay_to_domains
                message         = Unknown account <$local_part@$domain>
                log_message     = Unknown account <$local_part@$domain>

все это внутри acl_check_rcpt, в самом конце. Ниже только посылание подальше.

Так вот, второй кондишен поставил потому что в некоторых случаях на несуществующие адреса вместо Unknown account выдавалось посылание подальше. Сделал второй кондишен и проблему поборол. Но, уверен, что не очень красиво поборол.

Посоветуйте как побороть красивее.
Заранее спасибо.

Re: проверка получателя в exim

Добавлено: 2008-03-27 13:45:24
dikens3
Читать тут. А спасибо сюда написать.

P.S. Необходимо понять как работает endpass и всё станет нормально.

Re: проверка получателя в exim

Добавлено: 2008-03-27 14:00:12
Laa
Теперь понял как работает endpass.

Говорил же что туплю... :twisted:

:P спасибо!

Re: проверка получателя в exim

Добавлено: 2008-03-27 15:56:09
ashgdw
2 cyrus_user: спасибо за пример, как раз думал о подобном, возьму на заметку. :P

Если добавить звездочку в route_list, то как я понял, acl с проверкой получателя не срабатывает, в итоге проходят письма для любого получателя.

Если добавить опцию verify_recipient в роутер manualroute, то письма проходят только для тех, кто есть в списке, иначе срабатывает соответствующий ACL. Но без звездочки ACL срабатывает для любого получателя. В итоге конфиг рутера такой:

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

manualroute:
  driver = manualroute
  verify_recipient
  local_parts = lsearch;/usr/local/etc/exim/users.list
  domains =  +local_domains
  transport = remote_smtp
  route_list = * 192.168.254.4
Тоесть, получается, verify_recipient работает с ACL и со списком пользователей. Но если в route_list не указана звездочка, то получается он не работает со списком. Так? Я так понял, звездочка означает всем и для всех, но как она связана с verify_recipient???

Re: проверка получателя в exim

Добавлено: 2008-03-29 19:51:06
ashgdw
cyrus_user писал(а):
ashgdw писал(а):Это понятно. Не понятно, как в моем случае, с роутером manulroute делать проверку получателя. На ум приходит только создать вместо роутера manualroute соответствующий транспорт, который указать в роутере accept.
например добавить до вашего роутера manualroute, роутер redirect, где в data проверить наличие получателя. пример:

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

rcpt_check_router:
no_verify
driver = redirect
data  = "${lookup юзера где нам надо} {$local_part@$domain} {:fail: RCPT unknown}}"
Я так понял, это для юзания БД, а у меня пользователи в файле типа passwd лежат.
В итоге остановился на проверке в acl, с роутером так и не смог разобраться. :(

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

accept domains = +local_domains
       endpass
       message = "In my mailserver not stored this user"
       condition = ${lookup{$local_part}lsearch{/usr/local/etc/exim/users.list}{yes
}{no}}

Re: проверка получателя в exim

Добавлено: 2014-08-27 18:25:31
Across
Ребят, нужна помощь. В конфиге exim у меня следущее:

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

rcpt_check_router:
    driver = redirect
    allow_fail
    no_verify
    data = "${if eq{}{${lookup mysql{ MYSQL_USER }}}{:blackhole: Unknown local user!}{$local_part@$domain} }"
Строка MYSQL_USER имеет вид:

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

MYSQL_USER = SELECT distinct awm_accounts.mail_inc_login as login FROM awm_accounts INNER JOIN awm_domains ON awm_accounts.id_domain = awm_domains.id_domain WHERE  (awm_accounts.mail_inc_login = CONCAT('$local_part', '@', '$domain') OR awm_accounts.mail_inc_login = '$local_part') AND awm_domains.name = '$domain' AND awm_domains.is_internal = 1 AND awm_accounts.deleted = 0;
Если последний параметр awm_accounts.deleted = 0, то письмо доставляется получателю, если равен 1, то в лог exim'a увидим:

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

=> :blackhole: <test@localhost> R=rcpt_check_router
из секции rcpt_check_router конфига exim'a. Можно ли каким-то образом вставить в эту секцию правило для отправки письма отправителю?

Re: проверка получателя в exim

Добавлено: 2014-08-31 9:46:52
Alex Keda
да