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

exim4 - заменить доменное имя получателя, виртуальные домены

Я привязываю к настройке exim4 как MTA для многодоменного хоста. Все пользователи и домены виртуальные, хранятся в базе вот так:

create table emails
(
domain varchar(200),
username varchar(200),
password varchar(200)
)

Сообщения хранятся в почте:

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)
)

И добавил select source_domain from domains_aliases в MAIN_LOCAL_DOMAINS. А теперь я хотел бы написать правило с условием для доменов, перечисленных в этой таблице, наверное, так (не уверен):

condition=${lookup sql{select source_domain from domain_aliases where source_domain=${quote_sql:$domain}}{{yes}{no}}}

Затем выполните замену - измените $ domain на select replacement_domain from domains_aliases where source_domain='${quote_sql:$domain}' Я искал документы, но не нашел, как это сделать. Может какие-то headers_rewrite? Не могу найти это в документации, мне немного непонятно, помогите пожалуйста.

Обновление: только что понял, что можно сделать driver = redirect для чего-то вроде select $loacl_part@replacement_domain from domain_aliases where source_domain=$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