我正在尝试将 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}} 符合条件_保留_域名