Настройка паралельной доставки (Dual Delivery) почты в Postfix
Эта заметка рассказывает как с помощью Postfix организовать параллельную доставку почты на несколько почтовых серверов в рамках одно доменного имени, без использования общеизвестной пересылки или сборщика писем. В данном случае письма для почтового ящика [email protected] будут доставляться на несколько почтовых серверов, где именно этот почтовый ящик и настроен.
В роли вторичного сервера я буду использовать бизнес аккаунт на mail.ru. Почтовый сервер mx.mail.ru
В своем распоряжении я имел CentOS сервер с предустановленным стэком Postfix+Dovecot. Виртуальные почтовые ящики хранились в базе MySQL.
Если у Вас нету такого счастья - можете ознакомиться со статьей: Установка и Настройка Postfix
Для начала нужно установить доставщик почты - msmtp:
yum install msmtp
Если ничего не нашлось - включите Epel репозитарий и повторите предыдущий шаг:
wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -ihv epel-release-6-8.noarch.rpm
Создаем общедоступную папку на сервере:
mkdir /opt/smtpdd
Дальше нужно скачать скрипт доставки:
wget -O /opt/smtpdd/smtpdd.sh /wp-content/uploads/2014/05/smtpdd.sh
Создаем папку для временного хранилища очереди доставки:
mkdir /var/spool/smtpdd
Создадим пользователя под которым будет работать скрипт:
useradd smtpdd
chown -R smtpdd:smtpdd /opt/smtpdd
chown -R smtpdd:smtpdd /var/spool/smtpdd
Дальше в любимом редакторе откройте файл /etc/postfix/master.cf
и внесите в него вот такую запись.:
dualdelivery unix - n n - 5 pipe
user=vmail argv=/opt/smtpdd/smtpdd.sh /var/spool/smtpdd ${sender} ${recipient} localhost:10026:q mx.mail.ru:25:q
Не забудьте заменить mx.mail.ru
адресом Вашего второго сервера.
Теперь создаем дополнительный фильтр для доставки почты на себя:
localhost:10026 inet n - n - - smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks,no_milters
Осталось включить фильтр dualdelivery для smtp сервиса. Этот сервис, как правило, описан в первой незакомментированной строке master.cf. Приводим ее к следующему виду:
smtp inet n - n - - smtpd
-o content_filter=dualdelivery
Теперь нужно удостовериться что один из следующих параметров объявлен в /etc/postfix/main.cf:
- relay_domains = yourdomain.com
- virtual_mailbox_domains = mysql:$config_directory/virtual_domains.cf
Все. Можно перезапускать postfix и проверять все ли работает.