我以为我理解的“别名域”只是另一个域的别名!所以当我设置一个邮箱时,比如“[电子邮件保护]“,并添加“alias.com”作为“main.com”地址的域别名”[电子邮件保护]“也可以……但是不行!”
因此,我添加了以下域:
- 主页
- 别名.com
我已经创建了这个邮箱:
然后我映射了这些别名域:
- 别名.com => main.com
然后当我发送邮件到[电子邮件保护]我收到此错误:
Recipient address rejected: User unknown in virtual mailbox table (state 13).
我不想为每个域名都创建别名,因为我有几个。我也不想使用通配符(如 info@*),因为还有其他域名不是别名main.com
那么...这些到底是什么?
答案1
文档中有这样的解释:http://www.postfix.org/VIRTUAL_README.html#virtual_alias
您想要“别名邮箱”,又名 virtual_mailbox_alias 和 virtual_mailbox_maps,但谈论“别名域”:http://www.postfix.org/ADDRESS_CLASS_README.html#virtual_alias_class
答案2
添加alias.com
是virtual_alias_domains
正确的第一步,但这只是告诉 Postfix 您想要将该域用作别名。它并没有说明别名应该是什么。为此,您需要使用虚拟别名映射。
首先,添加如下内容main.cf
:
virtual_alias_domains = alias.com
virtual_alias_maps = hash:/etc/postfix/virtual
添加后,virtual_alias_maps
您将得到一个用作虚拟别名映射的文件 ( /etc/postfix/virtual
)。但是,您将在该文件中放入什么呢?根据虚拟(5)手册页:
postmap(1) 命令的输入格式如下:
pattern address, address, ...
当模式与邮件地址匹配时,用相应的地址替换它。
和
通过从索引文件(例如 DB 或 DBM)或网络表(例如 NIS、LDAP 或 SQL)进行查找,每个 user@domain 查询都会生成如下所述的查询模式序列。每个查询模式都会发送到每个指定的查找表,然后再尝试下一个查询模式,直到找到匹配项。
...
@domain address, address, ...
将域中其他用户的邮件重定向至地址。
和
查找结果会进行地址重写:当结果具有 形式时
@otherdomain
,结果将成为 中的同一用户otherdomain
。这仅适用于多地址查找结果中的第一个地址。
因此,输入以下内容/etc/postfix/virtual
将实现您想要的全域别名:
# map any <user>@alias.com to the matching <user>@main.com
@alias.com @main.com
然后,由于该文件是一个哈希表,您需要运行postmap
(解释,手册页):
postmap /etc/postfix/virtual
您可以在以下位置找到有关虚拟域的更多信息Postfix 虚拟域名指南以及关于别名Postfix 地址重写方法。
答案3
@Josh M.
我不知道这是否是正确的方法和/或好的做法,但我正在使用类似这样的方法:
virtual_alias_maps = regexp:/etc/postfix/domain_rewriting pgsql:/etc/postfix/pgsql/ virtual_alias_maps.cf
$ cat /etc/postfix/domain_rewriting
/^(.*)@domain1.com$/ ${1}@domain2.com
答案4
这是我对@sam-hanes 答案的简短版本(对我有用)
在你的虚拟别名映射添加 :
@from.domain <tab> @to.domain
在命令行中执行:
postmap /path/to/yourvirtualalismapsfile
在你的主配置文件文件添加:
virtual_alias_domains : from.domain
virtual_alias_domains 告诉 postfix,所有邮箱地址的形式为[电子邮件保护]都是别名。