Postfix - 混合虚拟别名和虚拟邮箱(包罗万象)

Postfix - 混合虚拟别名和虚拟邮箱(包罗万象)

我正在运行 postfix (2.9.6) 和 dovecot (2.2.5) 以及两个域:

  1. example.com 作为 virtual_mailbox_domain
  2. 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_orgvirtual_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]

相关内容