让 mailman3 与 postfix 和 dovecot 很好地配合

Ste*_*ein 5 email postfix mailman

我正在玩 mailman3,并且遇到了这个问题:mailman3、Web 界面以及 hyperkitty 已使用 mailman-bundler 安装。我已将规定的后缀配置添加到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
Run Code Online (Sandbox Code Playgroud)

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

Recipient address rejected: User unknown in virtual mailbox table

这个 postfix 安装通常使用 avirtual_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
Run Code Online (Sandbox Code Playgroud)

这是基于优秀的NSA 证明您的电子邮件在 2 小时内指南。

现在,这个 StackOverflow 问题声称virtual_transporttransport_maps不能很好地结合在一起,尽管我在后缀文档中找不到任何可以验证此声明的内容。作者仅通过使用就解决了他们的问题,transport_maps这对我来说似乎不是一个选择。

请注意,我还收到一条警告,称local_recipient_mapsmailman3 中的选项会覆盖先前的定义,作为 dovecot 传递的一部分。这可以通过在一行上指定两个值来解决,如下所示:

local_recipient_maps = $virtual_mailbox_maps hash:/path/to/var/data/postfix_lmtp
Run Code Online (Sandbox Code Playgroud)

但这并不能解决问题。有谁对这项工作有任何想法或经验吗?我意识到 mailman3 仍然被认为是新的。这就是我玩它的原因。

Ste*_*ein 6

我已经弄清楚了这一点。事实证明,链接的 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'
Run Code Online (Sandbox Code Playgroud)

将 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
Run Code Online (Sandbox Code Playgroud)

它默认设置virtual_transport为dovecot,但允许覆盖它,将列表地址映射到邮递员本地传输。transport_maps