Предполагая, что мой сервер Postfix обслуживает домен example.com, Я хочу, чтобы он принимал почту для всех поддоменов example.com, кроме mail.example.com и in.example.com.
Сначала я пробовал использовать регулярное выражение, исключающее эти два поддомена:
(?(?!mail|in).+\.example.com)
Но это не сработало. Я не был уверен, связана ли проблема с регулярным выражением или механизм регулярных выражений Postfix не поддерживает условные выражения, поэтому я решил попробовать использовать условные выражения для файла таблицы. На данный момент моя таблица выглядела так:
/ etc / postfix / virtual_domains:
if !/(in|mail)\.example\.com/
/.+\.example\.com/ OK
endif
/etc/postfix/main.cf:
virtual_alias_domains = regexp:/etc/postfix/virtual_domains
Но и это не сработало. Что я делаю не так?
Измените это в main.cf
:
virtual_alias_domains = !/etc/postfix/not_these_domains.txt regexp:/etc/postfix/virtual_domains
/etc/postfix/not_these_domains.txt
:
in.example.com mail.example.com
И хранить /etc/postfix/virtual_domains
просто:
/.+@.+\.example\.com/ OK
Но обратите внимание: Это работает только для Postfix> 2.4
Если ваш Postfix построен с поддержкой PCRE, попробуйте использовать отрицательный ретроспективный анализ:
(?<!(mail|in)).+\.example\.com