Назад | Перейти на главную страницу

Могу ли я добавить глобальный псевдоним в virtual_alias_maps, но только для локальных доменов?

Я хочу создать глобальный псевдоним для всех моих доменов, чтобы получать всю почту на такие адреса, как postmaster@

Я добавил эти строки в aliases.pcre:

/(MAILER-DAEMON|postmaster|abuse|webmaster)@(.*)$/  me@mydomain

И в main.cf

virtual_alias_maps = pcre:/etc/postfix/aliases.pcre

но он также перехватывает почту на внешние домены, т.е. перенаправляет мне письма, отправленные на postmaster@external.com

Могу ли я перенаправить всю почту, отправленную на эти адреса, но только если домен находится в virtual_mailbox_domains? (без записи доменных имен в aliases.pcre

* Обновить *

пользователи, домены, псевдонимы ... хранятся в базе данных, для управления которой используется postfixadmin.

Таблицы псевдонимов выглядят так:

mysql> describe alias;
+----------+--------------+------+-----+---------------------+-------+
| Field    | Type         | Null | Key | Default             | Extra |
+----------+--------------+------+-----+---------------------+-------+
| address  | varchar(255) | NO   | PRI | NULL                |       |
| goto     | text         | NO   |     | NULL                |       |
| domain   | varchar(255) | NO   | MUL | NULL                |       |
| created  | datetime     | NO   |     | 0000-00-00 00:00:00 |       |
| modified | datetime     | NO   |     | 0000-00-00 00:00:00 |       |
| active   | tinyint(1)   | NO   |     | 1                   |       |
+----------+--------------+------+-----+---------------------+-------+

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

В качестве альтернативы, вместо длинного запроса, как предложено выше, вы можете разделить на две карты sql

virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-aliases.cf, mysql:/etc/postfix/my-custom-query.cf

Оба файла имеют одинаковый параметр, кроме запроса. Для /etc/postfix/mysql-virtual-aliases.cf, вы можете использовать запрос по умолчанию от postfixadmin

SELECT goto FROM alias WHERE address = '%s'

И для my-custom-query.cf у вас есть запрос

select 'me@example.com' AS goto from domain where domain='%d' AND '%u' REGEXP '^(MAILER-DAEMON|postmaster|abuse|webmaster)$' LIMIT 1;

Как это устроено

Если ваши первые карты mysql-virtual-aliases.cf возвращается ноль, то postfix попытается запросить вторую карту my-custom-query.cf.

Плюсы:

  • Если ваш адрес электронной почты соответствует запросу в mysql-virtual-aliases.cf, то вы просто выполняете один простой запрос.

Минусы:

  • Если ваш адрес электронной почты не соответствует запросу в mysql-virtual-aliases.cf, ты должен бежать дополнительный второй запрос.

Наконец то, что я настроил

в /etc/postfix/mysql-virtual-aliases.cf:

hosts = localhost
user = postfix
password = mypass
dbname = postfix

query = SELECT goto FROM alias WHERE address = '%s'

в /etc/postfix/mysql-virtual-aliases-postmaster.cf:

hosts = localhost
user = postfix
password = mypass
dbname = postfix

query = SELECT 'me@mydomain' AS goto FROM domain WHERE
        domain='%d' AND active = '1' AND
        '%u' REGEXP '^(MAILER-DAEMON|postmaster|abuse|webmaster)$' LIMIT 1

И в main.cf:

virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-aliases.cf,
                     mysql:/etc/postfix/mysql-virtual-aliases-postmaster.cf

Может кто знает более простой / действенный способ?