我正在运行 postfix (2.9.6) 和 dovecot (2.2.5) 以及两个域:
- example.com 作为 virtual_mailbox_domain
- example.org 作为虚拟别名域名
我想为未知用户设置两条不同的全部捕获规则,但它不能按预期工作。
使用以下配置,example.com 的 catch-all 规则适用于 example.com 和 example.org 地址(即,所有未知邮件都会发送到 johndoe 的 catch_com 邮箱,无论 example.org 或 example.com 地址如何)。删除 @example.com 规则会导致 @example.org 规则正常工作(邮件发送到 johndoe 的 catch_org 邮箱)。
主文件:
recipient_delimiter = +
virtual_mailbox_domains = example.com
virtual_mailbox_maps = hash:/opt/local/etc/postfix/virtual_mailbox
virtual_alias_domains = example.org
virtual_alias_maps = hash:/opt/local/etc/postfix/virtual_alias
主配置文件
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/opt/local/libexec/dovecot/dovecot-lda -f ${sender} -d ${user}@${nexthop} -m ${extension}
虚拟邮箱:
[email protected] example.com/johndoe
虚拟别名:
@example.org [email protected]
@example.com [email protected]
将 catchall 规则添加到 virtual_mailbox 不起作用,因为正如我读到的,使用 dovecot-lda 会导致 virtual_mailbox 中的 catchall 规则被忽略。
答案1
这是 Postfix 的预期行为。虚拟别名将首先在任何其他别名之前进行检查。因此,example.com 的 catchall/opt/local/etc/postfix/virtual_alias
将在之前路由您的电子邮件/opt/local/etc/postfix/virtual_mailbox
。
在您的情况下johndoe+catch_org
将virtual_alias
再次递归映射到,以便与之匹配johndoe+catch_com
。
如果您将 catchall 设置为同一域中的另一个邮箱,那么您可以在 中设置 catchall virtual_mailbox_maps
。在 底部添加此行/opt/local/etc/postfix/virtual_mailbox
@example.com example.com/johndoe
缺点是您无法区分 example.com catchall 和 example.org catchall 之间的电子邮件。对于 dovecot 案例,我无法确认该方案是否有效。
另一个丑陋的解决方案是将 example.com 的非通用帐户放入/opt/local/etc/postfix/virtual_alias
。例如:
# account with mailbox
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]
# for example.org domain catch all
[email protected] [email protected]
@example.org [email protected]
@example.com [email protected]