exim4-替换收件人域名、虚拟域

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,但也许有更好的方法?

答案1

通常,您需要将域设置为适合服务器的域。您可能会将信封域设置为“qualify_domain”设置。您可能需要为虚拟主机配置服务器。(用户需要位于适当的域别名文件中。)我有以下路由器来处理虚拟域。

# 该路由器使用传统的 /etc/aliases 类型文件处理别名。
#
#### 注意:您必须确保 /etc/exim/virutual/${domain} 文件存在
####
#### 这适用于标准的“名称:目的地”别名格式

# 域别名
vdomain_别名:
  debug_print = "R: $local_part@$domain 的 vdomain_aliases"
  驱动程序 = 重定向
  允许失败
  允许延迟
  域 = dsearch;/etc/exim4/virtual
  数据 = ${lookup{$local_part}lsearch*@{/etc/exim4/virtual/$domain}}
  符合条件_保留_域名

相关内容