xM писал(а): см. Exim manualroute
Спасибо за подсказку, после прочтения составил такой роутер:
Код: Выделить всё
temp_manual_router:
driver = manualroute
transport = remote_smtp
route_list = example1.ru mail.example4.ru
и поставил его после локальной доставки, но конечно же он не работает, как хотелось бы. Exim смотрит в свою базу по данному домену (что естественно), если есть ящик, осуществляет доставку письма, если нет такого адреса в локальной базе - отправляет сообщение с ошибкой Unroutable address.
У нас на экзиме несколько доменов example1.ru example2.ru example3.ru + релей на example4.ru (exchange), и такие роутеры:
Код: Выделить всё
begin routers
#запрещаем отправку писем со старых отключённых доменов
block_outgoing_mail_from_domain:
driver = redirect
domains = ! +local_domains
senders = *@lsearch;/etc/exim/blocked.domains
allow_fail = yes
data = :fail: You can not send emails from this mailbox, contact your support. (Rassilka pisem s dannogo yaschika zapreschena, obratites v OSPTK vashego filiala)
relay_to_our_domain:
driver = "manualroute"
route_data = ${lookup mysql{SELECT relay_name FROM mailertable WHERE domain='${domain}'}}
transport = remote_smtp
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more
system_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{SELECT recipients FROM aliases WHERE local_part='${local_part}' AND domain='${domain}'}}
userforward:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{SELECT recipients FROM userforward WHERE local_part='${local_part}' AND domain='${domain}'}}
#доставка писем локальным пользователям
mysqluser:
driver = accept
condition = ${if eq{} {${lookup mysql{SELECT home FROM users WHERE login='${local_part}' AND domain='${domain}' AND active='Y'}}}{no}{yes}}
transport = dovecot_delivery
#доставка на Exchange
temp_manual_router:
driver = manualroute
transport = remote_smtp
route_list = example1.ru mail.example4.ru
На сервере mail.example4.ru - домен example4.ru (authoritative - что-то типа local в exim), и завели example1 (internal relay - если пользователь есть в базе Exchange - доставка осуществляется ему, если нет, то письмо переадресуется на другой сервер, в нашем случае на Exim).
test1@example1.ru - пользователь exim и
test2@example.ru - Exchange.
При таком раскладе получается:
1. Отправляем письма с exchange (адреса типа example4.ru) - письма доходят как до test1, так и до test2 так и на внешние адреса;
2. Отправляем письма с exim'овского адреса test1 на адреса внешние и test2 - на внешний адрес доставляется, на Exchange нет - Unroutable address;
3. Отправляем письмо извне на два адреса,
test1@example1.ru (пользователь exim) и
test2@example.ru (Exchange) : доставка осуществляется пользователю exim, для пользователя Exchange - Unroutable address.
Подскажите - в шары долблюсь, понять не могу. Если роутер поднять выше - то доставка на exim не осуществляется.
Отправлено спустя 42 минуты 2 секунды:
Правильно ли я понимаю, что нужно написать condition для этого роутера - поиск пользователя в локальной БД, если такого нет, то роутер запускается и выполняет пересылку письма?