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

Postfix - смешивание virtual_aliases и virtual_mailboxes (catchall)

Я использую postfix (2.9.6) с dovecot (2.2.5) и два домена:

  1. example.com как виртуальный_почтовый_домен
  2. example.org как виртуальный_алиас_домен

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

При использовании конфигурации, приведенной ниже, правило для домена example.com применяется к адресам как example.com, так и example.org (т.е. вся неизвестная почта доставляется в почтовый ящик johndoe catch_com, независимо от адресов example.org или example.com). Удаление правила @ example.com приводит к правильной работе правила @ example.org (почта доставляется в почтовый ящик johndoe catch_org).

main.cf:

recipient_delimiter = +

virtual_mailbox_domains = example.com
virtual_mailbox_maps = hash:/opt/local/etc/postfix/virtual_mailbox

virtual_alias_domains = example.org
virtual_alias_maps = hash:/opt/local/etc/postfix/virtual_alias

master.cf

dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/opt/local/libexec/dovecot/dovecot-lda -f ${sender} -d ${user}@${nexthop} -m ${extension}

виртуальный_почтовый ящик:

johndoe@example.com         example.com/johndoe 

virtual_alias:

@example.org            johndoe+catch_org@example.com
@example.com            johndoe+catch_com@example.com

Добавление правила catchall в virtual_mailbox не работает, потому что, как я где-то читал, использование dovecot-lda приводит к игнорированию правил catchall в virtual_mailbox.

Это ожидаемое поведение от postfix. Виртуальный псевдоним будет проверяться перед любым другим псевдонимом. Итак, весь сайт example.com /opt/local/etc/postfix/virtual_alias перенаправит вашу электронную почту до /opt/local/etc/postfix/virtual_mailbox.

В твоем случае johndoe+catch_org будет рекурсивно отображаться на virtual_alias снова, поэтому он будет соответствовать johndoe+catch_com.

Если вы настроили catchall для другого почтового ящика в том же домене, вы можете настроить catchall в virtual_mailbox_maps. Добавьте эту строку внизу /opt/local/etc/postfix/virtual_mailbox

@example.com    example.com/johndoe

Обратной стороной является то, что вы не можете отличить электронную почту от example.com catchall или example.org catchall. Для случая голубятни я не могу подтвердить, что эта схема будет работать или нет.


Еще одно уродливое решение - поместить необщий аккаунт example.com в /opt/local/etc/postfix/virtual_alias. Например:

# account with mailbox
john@example.com        john@example.com
doee@example.com        doee@example.com
abcd@example.com        abcd@example.com

# for example.org domain catch all
johndoe+catch_org@example.com     johndoe+catch_org@example.com 

@example.org            johndoe+catch_org@example.com
@example.com            johndoe+catch_com@example.com