让 mailman3 与 postfix 和 dovecot 完美配合

让 mailman3 与 postfix 和 dovecot 完美配合

我正在使用 mailman3,遇到了这个问题:mailman3、Web 界面以及 hyperkitty 都是使用 mailman-bundler 安装的。我已将规定的 postfix 配置添加到main.cf

recipient_delimiter = +
unknown_local_recipient_reject_code = 550
owner_request_special = no
transport_maps = hash:/path/to/var/data/postfix_lmtp
local_recipient_maps = hash:/path/to/var/data/postfix_lmtp
relay_domains = hash:/path/to/var/data/postfix_domains

列出的文件是全球可读的,因此不应该存在权限问题。我可以通过 Web 界面成功创建域/列表,但当我尝试向列表地址发送邮件时,邮件被拒绝,并显示以下消息:

Recipient address rejected: User unknown in virtual mailbox table

此 postfix 安装通常使用 来virtual_transport向 dovecot 投递邮件。相应的配置如下:

virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
local_recipient_maps = $virtual_mailbox_maps

这是基于优秀的两小时内让您的电子邮件通过 NSA 防护指导。

现在,这个 StackOverflow 问题声称virtual_transporttransport_maps不能很好地协同工作,尽管我在后缀文档中找不到任何可以验证这一说法的内容。作者已经解决了他们的问题,只使用transport_maps对我来说似乎不是一个选择。

请注意,我还收到一条警告,local_recipient_mapsmailman3 中的选项会覆盖 dovecot 交付中先前的定义。可以通过在一行中指定两个值来解决此问题,如下所示:

local_recipient_maps = $virtual_mailbox_maps hash:/path/to/var/data/postfix_lmtp

但这并不能解决问题。有人有什么想法或经验可以解决这个问题吗?我意识到 mailman3 仍然被认为是新的。这就是我使用它的原因。

答案1

我已经搞清楚了。事实证明,链接的 StackOverflow 问题中的说法是错误的。确实可以将virtual_transporttransport_maps一起使用。我的问题是,用于确定的 SQL 查询virtual_mailbox_maps自然只会1在数据库中定义邮箱时返回。一旦该检查失败,消息就会被拒绝。

-- from: mysql-virtual-mailbox-maps.cf
query = SELECT 1 FROM virtual_users WHERE name = 'name = '%s'

将 mailman3 映射添加到virtual_mailbox_maps设置中解决了我的问题。这是我的工作配置:

virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf hash:/path/to/var/data/postfix_lmtp
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
local_recipient_maps = hash:/path/to/var/data/postfix_lmtp mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
transport_maps = hash:/path/to/var/data/postfix_lmtp

它设置virtual_transport默认transport_maps到 dovecot 但允许通过将列表地址映射到 mailman 本地传输来覆盖它。

相关内容