Столкнулся тут на днях с такой проблемой - есть Exim, завязанный на Active Directory, в его конфиге есть несколько роутеров для почтовых рассылок по группам пользователей - например, mailgroup1@domain.ru, mailgroup2@domain.ru и т.п. Пользователь хочет отправить письмо, и при составлении указывает в поле "Кому" их по очереди: mailgroup1@domain.ru,mailgroup2@domain.ru, отправляет, а потом прибегает и жалуется, что одной из почтовых групп ничего не прилетело.
Начал разбираться - вижу следующее:
Код: Выделить всё
# exim -bt mailgroup1@domain.ru
user1@domain.ru
<-- mailgroup1@domain.ru
router = ldap_user, transport = ldap_delivery
user2@domain.ru
<-- mailgroup1@domain.ru
router = ldap_user, transport = ldap_delivery
user3@domain.ru
<-- mailgroup1@domain.ru
router = ldap_user, transport = ldap_delivery
user4@domain.ru
<-- mailgroup1@domain.ru
router = ldap_user, transport = ldap_delivery
Код: Выделить всё
# exim -bt mailgroup2@domain.ru
user5@domain.ru
<-- user5@domain.ru
<-- mailgroup2@domain.ru
router = ldap_filial_user, transport = remote_smtp
host 192.168.1.16 [192.168.1.16]
user6@domain.ru
<-- user6@domain.ru
<-- mailgroup2@domain.ru
router = ldap_filial_user, transport = remote_smtp
host 192.168.1.16 [192.168.1.16]
Теперь смотрим их вместе:
Код: Выделить всё
# exim -bt mailgroup2@domain.ru,mailgroup1@domain.ru
user5@domain.ru
<-- user6@domain.ru
<-- mailgroup2@domain.ru
router = ldap_filial_user, transport = remote_smtp
host 192.168.1.16 [192.168.1.16]
user6@domain.ru
<-- user6@domain.ru
<-- mailgroup2@domain.ru
router = ldap_filial_user, transport = remote_smtp
host 192.168.1.16 [192.168.1.16]
user1@domain.ru
<-- mailgroup1@domain.ru
router = ldap_user, transport = ldap_delivery
user2@domain.ru
<-- mailgroup1@domain.ru
router = ldap_user, transport = ldap_delivery
user3@domain.ru
<-- mailgroup1@domain.ru
router = ldap_user, transport = ldap_delivery
user4@domain.ru
<-- mailgroup1@domain.ru
router = ldap_user, transport = ldap_delivery
Код: Выделить всё
# exim -bt mailgroup1@domain.ru,mailgroup2@domain.ru
user1@domain.ru
<-- mailgroup1@domain.ru
router = ldap_user, transport = ldap_delivery
user2@domain.ru
<-- mailgroup1@domain.ru
router = ldap_user, transport = ldap_delivery
user3@domain.ru
<-- mailgroup1@domain.ru
router = ldap_user, transport = ldap_delivery
user4@domain.ru
<-- mailgroup1@domain.ru
router = ldap_user, transport = ldap_delivery
user1@domain.ru [duplicate, would not be delivered]
<-- mailgroup2@domain.ru
router = ldap_user, transport = ldap_delivery
user2@domain.ru [duplicate, would not be delivered]
<-- mailgroup2@domain.ru
router = ldap_user, transport = ldap_delivery
user3@domain.ru [duplicate, would not be delivered]
<-- mailgroup2@domain.ru
router = ldap_user, transport = ldap_delivery
user4@domain.ru [duplicate, would not be delivered]
<-- mailgroup2@domain.ru
router = ldap_user, transport = ldap_delivery
В конфиге роутеры сделаны следующим образом:
Код: Выделить всё
dnslookup:
driver = dnslookup
domains = !+local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more
redirect_to_filial:
driver = redirect
domains = +local_domains
data = ${lookup ldap{LDAP_AD_MAIL_FILIAL_RCPT}{$local_part@$domain}}
redirect_router = ldap_filial_user
lists_alias_ad:
driver = redirect
domains = +local_domains
data = ${perl{rcpt_generator}{$local_part@$domain}}
redirect_router = ldap_user
forbid_pipe
forbid_file
lists_alias_ad_filial:
driver = redirect
domains = +local_domains
data = ${perl{filial_rcpt_generator}{$local_part@$domain}}
# redirect_router = ldap_filial_user
forbid_pipe
forbid_file
lists_alias:
driver = redirect
domains = +local_domains
local_parts = !all
file = /usr/local/etc/exim/list/.exim-$local_part
redirect_router = ldap_user
forbid_pipe
forbid_file
ldap_check:
driver = redirect
domains = +local_domains
allow_fail
allow_defer
data = ${lookup ldap{LDAP_AD_MAIL_RCPT}{$local_part@$domain}{:fail: There is no such user}}
redirect_router = ldap_user
ldap_user:
driver = accept
transport = ldap_delivery
ldap_filial_user:
driver = manualroute
route_list = * 192.168.1.16
transport = remote_smtp
cannot_route_message = There is no such user
Вобщем, загвоздка в том, что в первом случае почтовые адреса указаны в порядке, обратном следованию роутеров, и всё нормально уходит.
А во втором случае - почтовые адреса указаны наоборот, и отрабатывает только первый список рассылки.
В чём прикол?