Postfix 别名 - 全部捕获未按预期工作

Postfix 别名 - 全部捕获未按预期工作

我的 postfix 配置有问题。我想为某个域设置一个万能电子邮件地址。我的虚拟邮箱和别名保存在 postgresql 数据库中。文件 vdomains.cf、vmailbox.cf 和 valias.cf 中定义的查询分别是:

query = SELECT 1 FROM domains WHERE domain = '%s'

query = SELECT CONCAT(domains.domain, '/', mailboxes.address, '/') AS maildir FROM mailboxes LEFT JOIN domains ON mailboxes.domain = domains.id WHERE mailbox='%s'

query = SELECT dst FROM virtual_aliases WHERE src = '%s'

这些文件通过此块链接到 main.cf

virtual_mailbox_domains = pgsql:/etc/postfix/vdomains.cf
virtual_alias_maps = pgsql:/etc/postfix/valias.cf
virtual_mailbox_base = /srv/mail
virtual_mailbox_maps = pgsql:/etc/postfix/vmailbox.cf
virtual_uid_maps = pgsql:/etc/postfix/vuidmaps.cf
virtual_gid_maps = pgsql:/etc/postfix/vdomainmaps.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp

这对于已知收件人非常有效,服务器会拒绝所有未知收件人。如果我在别名表中定义一个地址映射到邮箱表中的另一个现有地址,则别名也有效。

问题在于别名表在邮箱表之前得到解析,当我想要为一个万能电子邮件添加别名时,这会产生一个大问题,如下所示:

src          dst
@domain.com  [email protected]

这个问题在实际邮箱之前得到解决,因此所有电子邮件(包括发给现有用户的电子邮件)都会转发到[电子邮件保护]地址。

根据堆栈或其他网站上的几个答案,这种设置应该有效,并且可能对某些人有效,所以我相信我做错了什么。

最后一件事 - 我的设置是带有 Postfix 2.11.3 的 Debian Jessie。

非常感谢您的帮助,提前致谢

答案1

我终于找到了解决方案。这可能不是最好的解决方案,但我读完所有相关的 postfix 文档和许多其他帖子后,还是找不到更正确的解决方案。这个问题没有得到回答,这又表明可能不存在“正确”的解决方案。

我的解决方法很简单。我发现,如果您像这样指定虚拟别名表中的所有现有地址:

[email protected]    [email protected]
[email protected]   [email protected]

(来源和目的地基本相同)

它按原意运行。(这是我在另一个关于同一主题的问题中发现的建议)。好吧,将这些信息放入 virtual_aliases 表中显然是错误的(信息重复,...),所以我想出了一个更优雅的解决方案:

CREATE OR REPLACE VIEW v_virtual_aliases AS 
 SELECT mailboxes.mailbox AS src,
    mailboxes.mailbox AS dst
   FROM mailboxes
UNION ALL
 SELECT virtual_aliases.src,
    virtual_aliases.dst
   FROM virtual_aliases;

这样做只是创建一个视图,其中包含来自 virtual_aliases 表的所有信息以及来自实际邮箱表的所有现有邮箱。这样就不会出现数据重复,别名也能按预期工作 - 仅适用于邮箱表中没有条目的地址。有了此查询,即使对于大型数据库,性能也不会成为问题。

然后我相应地更新了 valias.cf 文件:

query = SELECT dst FROM virtual_aliases WHERE src = '%s'

现在一切都按照原始问题的预期进行。

相关内容