[exim-conf] отсылка копий писем для локальных пользователей на удаленный SMTP сервер

Victor Ustugov victor на corvax.kiev.ua
Сб Ноя 29 16:18:50 EET 2014


приветствую

для переменной confMAIL_BACKUP реализовано еще одно значение
REMOTE_SMTP, при использовании которого будет производиться
маршрутизация копий локальных писем на удаленный SMTP сервер без
перезаписи адреса получателя.

define(`confMAIL_BACKUP', `REMOTE_SMTP')

понадобилось такое для клиента, который захотел, чтобы на backup MX была
доступна по IMAP почта, полученная им в случае недоступности primary MX,
да еще чтобы доступ можно было получить по тем же логинам и паролям, что
и на primary MX. при восстановлении доступности primary MX копии (вернее
оригиналы) писем должны быть доставлены на primary MX.

т. е. на backup MX одни и те же домены должны быть одновременно и
локальными и рилеемыми.

физически в списке рилеемых доменов локальные домены указывать не нужно.

также такую схему работы можно считать неким специфическим вариантом
бекапа всей входящей почты на удаленном SMTP сервере.

одновременно с REMOTE_SMTP можно использовать и другие значения для
confMAIL_BACKUP (например, SYSTEM_FILTER), указывая их через пробел:

define(`confMAIL_BACKUP', `SYSTEM_FILTER REMOTE_SMTP')

при использовании REMOTE_SMTP в качестве значения confMAIL_BACKUP можно
уточнить список доменов, входящая почта которых должна копировать на
удаленный SMTP сервер. список указывается в переменной
confMAIL_BACKUP_REMOTE_SMTP_DOMAIN_LIST.

значение по умолчанию:
define(`confMAIL_BACKUP_REMOTE_SMTP_DOMAIN_LIST', `+local_domains')

можно копировать почту всех доменов, кроме, например, $qualify_domain:
define(`confMAIL_BACKUP_REMOTE_SMTP_DOMAIN_LIST', `!$qualify_domain :
+local_domains')

адрес удаленного SMTP сервера указывается в переменной
confMAIL_BACKUP_REMOTE_SMTP_HOST:
define(`confMAIL_BACKUP_REMOTE_SMTP_HOST', `backup.relay.domain.tld')

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

вот реальный пример роутера для define(`confVIRT_MDIR_USERLIST', `MYSQL'):

local_delivery_copy_smtp:
        driver                  = manualroute
        transport               = remote_smtp
        domains                 = !$qualify_domain : +local_domains
        condition               = ${lookup mysql{ \
 SELECT login as id, maildir as home, maildir as maildir \
 FROM users WHERE login="${quote_mysql:$local_part@$domain}" \
                                }{yes}{no}}
        route_data              = backup.relay.domain.tld
        no_verify
        unseen

набор полей в SQL запросе избыточен для данной задачи, но, как я уже
писал, запрос используется тот же, что и для проверки существования
адреса получателя в роутере локальной доставки. что должно привести к
кешированию результата выполнения запроса и использованию
прокешированного результата при локальной доставке.

p. s. данный фукнционал реализован только для случаев, когда в
confDELIVERY_TO указано значение MDIR_VIRTUAL. для доставки почты в
мейлбоксы или мейлдиры системных пользователей данный функционал не
реализован.

-- 
Best wishes Victor Ustugov  mailto:victor на corvax.kiev.ua
public GnuPG/PGP key:       http://victor.corvax.kiev.ua/corvax.asc
ICQ UIN: 371808614          JID: corvax_at_nb на jabber.corvax.kiev.ua
nic-handle: CRV-UANIC



Подробная информация о списке рассылки exim-conf