Posts tagged ‘virtual_alias_maps’

postfix+dovecot: virtual alias

Итак: есть почтовый сервер, в котором MTA — Postfix, MDA — Dovecot. T — transfer, D — delivery.
Пользователей больше одного, поэтому они сделаны виртуальными и хранятся в MySQL.
Соответственно в main.cf postfix есть строчки, касающиеся запросов к базе:
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
Эти файлы конфигураций содержат информацию для подключения к базе и сам запрос. В результате запросов postfix получает из базы домены, которые должен обслуживать, и пользователей.
Затем может понадобится переадресация. Для внешних доменов я рекомендую использовать generic.
А здесь речь пойдет о переадресации писем на внутренние адреса. Мне это понадобилось для создания списка рассылки без применения специальных пакетов типа Mailman и пр.
Цель: при отсылке письма на какой-то внутренний почтовый адрес, оно рассылается целому списку пользователей. При этом на сам адрес рассылки письмо не приходит. Это просто alias.
Средство: использовать virtual_alias_maps. Только осторожнее со старыми postfix старше 2.1!
Добавляем в main.cf строчку
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
Соответственно в базе MySQL должна быть таблица, содержащая aliasы.
Для тотальной рассылки по всем пользователям в ней должна быть одна запись:
ключ — адрес_рассылки, результат запроса — список_адресов-абонентов_рассылки_через_запятую.
Чтобы сформировать строчку с абонентами рассылки, советую снять дамп с таблицы виртуальных пользователей через phpmyadmin в CSV, а затем скриптом обработать — получить строку из всех адресов через запятую. Также стоит узнать ее размер и соответственно выставить длину строки в таблице alias.
И последнее: чтобы все заработало, необходимо удостовериться, что в main.cf НЕТ строки
receive_override_options = no_address_mappings
Это связано с механизмом работы postfix, который позволяет добавлять внешние фильтры контента письма (типа amavis). И соответственно эта опция запрещает манипуляции с исходным адресом письма: к нему относятся virtual aliasing, canonical, bcc и тд
Прочитать об этом можно здесь.
Интересный факт: если эту опцию оставить, создать alias и пытаться отослать письмо на адрес рассылки, то dovecot создаст mailbox для этого адреса и положит туда письмо, хотя пользователя такого не существует в таблице пользователей! То есть по факту dovecot письмо доставил — это будет отражено в логах. Но никто никогда его не получит при помощи postfix — пользователя-то такого нет.

Январь 24, 2012 at 17:14 Оставьте комментарий