Я привязываю к настройке exim4 как MTA для многодоменного хоста. Все пользователи и домены являются виртуальными и хранятся в базе данных следующим образом:
create table emails
(
domain varchar(200),
username varchar(200),
password varchar(200)
)
Сообщения хранятся в maildirs:
directory = /var/spool/mail/$domain/$local_part
У меня несколько доменов, например private.tld, company1.tld и company2.tld. Я хочу настроить exim для обработки доменов company1 и company2, таких как company1, и также хочу обрабатывать поддомены, такие как www.private.tld как private.tld. И мне нужно, чтобы это выполнялось для каждого пользователя, без явных псевдонимов для каждого пользователя. Как я понял, мне нужно сделать что-то вроде псевдонимов домена, поэтому я создал таблицу:
create table domains_aliases
(
source_domain varchar(300),
replacement_domain varchar(300)
)
И добавил
выберите исходный_домен из domain_aliases
в MAIN_LOCAL_DOMAINS.
А теперь я хотел бы написать правило с условием для доменов, перечисленных в этой таблице, возможно, так (не уверен):
condition = $ {lookup sql {select source_domain from domain_aliases, где source_domain = $ {quote_sql: $ domain}} {{yes} {no}}}
А затем выполните замену - измените $ domain на выберите replace_domain из domains_aliases, где source_domain = '$ {quote_sql: $ domain}'
Я искал документы, но не нашел, как это сделать. Может какие-то headers_rewrite? Не могу найти это в документации, мне это немного непонятно, пожалуйста, помогите.
Обновление: только что понял, что можно сделать driver = redirect для чего-то вроде select $ loacl_part @ replace_domain from domain_aliases, где source_domain = $ домен
, но, может быть, есть способ получше?
Обычно вы хотите установить в качестве домена соответствующий домен для сервера. Скорее всего, вы оставите для домена конверта значение "qualify_domain". Возможно, вам потребуется настроить сервер для виртуальных хостов. (Пользователи должны быть в соответствующем файле псевдонимов домена.) У меня есть следующий маршрутизатор для обработки виртуальных доменов.
# This router handles aliasing using traditional /etc/aliases type files. # #### NB You must ensure that /etc/exim/virutual/${domain} file exist #### #### This works with the standard "name : destination" alias format # Domain aliases vdomain_aliases: debug_print = "R: vdomain_aliases for $local_part@$domain" driver = redirect allow_fail allow_defer domains = dsearch;/etc/exim4/virtual data = ${lookup{$local_part}lsearch*@{/etc/exim4/virtual/$domain}} qualify_preserve_domain