Сама статья и описание: http://pjrlost.blogspot.ru/2012/11/smtp-delivery-to-two-mail-servers-via.html
Необходимо доставлять приходящие на почтовый шлюз письма сразу на несколько почтовых серверов без использования пересылок, сборщиков писем и т.д. Это может быть необходимо для:
Будем использовать Postfix (в роли MTA), msmtp (для пересылки почты) и скрипт smtpdd.sh который и реализует логику пересылки писем.
Сервера:
Таким образом, путь почты выглядит следующим образом:
Устанавливаем msmtp:
$ apt-get install msmtp
Важное примечание: в Ubuntu 14.04.4 версия msmtp довольно старая - 1.4.31-1, возможно стоит собрать более новую версию самостоятельно, как описано вот тут: Компиляция пакетов для Ubuntu
Скачать прилагаемый к данной заметке скрипт smtpdd.many-users.zip и развернуть его в /opt:
# mkdir /opt/smtpdd # unzip smtpdd.many-users.zip
Создать папку для временного хранения очереди доставки:
# mkdir /var/spool/smtpdd
Создаем пользователя, под которым будет работать скрипт:
# useradd smtpdd # chown -R smtpdd:smtpdd /opt/smtpdd # chown -R smtpdd:smtpdd /var/spool/smtpdd
И напоследок, добавить задание cron для доставки отложенных писем (с опцией доставки «o»):
# crontab -e -u smtpdd
строку:
0 * * * * /opt/smtpdd/smtpdd.sh /var/spool/smtpdd/ qrun > /dev/null 2>&1
Добавляем в /etc/postfix/master.cf строки:
dualdelivery unix - n n - 5 pipe user=smtpdd argv=/opt/smtpdd/smtpdd.sh /var/spool/smtpdd/ ${sender} ${recipient} mainserver:25:q backupserver:25:q testserver:25:d
Сервер записывается в формате: имя_сервера:порт:опция_доставки
Опции доставки:
Включаем dualdelivery для smtp - в файле /etc/postfix/master.cf изменяем строку smtp (обычно она первая) и приводим ее к следующему виду:
smtp inet n - - - - smtpd -o content_filter=dualdelivery
Не забываем прописать одну из этих настроек: relay_domains или virtual_mailbox_domains чтобы mailrelay пересылал почту.
Если доставка почты нужна на сам mailrelay, нужно добавить /etc/postfix/master.cf строки:
localhost:10026 inet n - n - - smtpd -o content_filter= -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks,no_milters
и изменить dualdelivery - добавить localhost:10026:q
dualdelivery unix - n n - 5 pipe user=smtpdd argv=/opt/smtpdd/smtpdd.sh /var/spool/smtpdd/ ${sender} ${recipient} localhost:10026:q mainserver:25:q backupserver:25:q testserver:25:d
Скрипт smtpdd.sh имеет одну неприятную особенность: он не умеет правильно работать с несколькими получателями - письмо доходит только первому пользователю из списка. Это исправляется просто: в файл /etc/postfix/main.cf необходимо добавить строки:
# Для dualdelivery - двойной доставки на несколько почтовых серверов # dualdelivery в имени переменной - это название транспорта из master.cf # без данной настройки почта не будет доставляться если письмо отправлялось сразу # нескольким пользователям dualdelivery_destination_recipient_limit = 1