Настройка паралельной доставки (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 и проверять все ли работает.