在虚拟别名表中未找到 postfix catchall 用户

在虚拟别名表中未找到 postfix catchall 用户

我的任务是创建一个 postfix 配置,用于接收来自所有域、收件人等的所有邮件,并将它们转发到一个万能邮箱。将来可能会进一步过滤,并且确实需要在另一个环境中使用该配置,以便邮件能够发送给预期的收件人。

以下是简短的 main.cf:

....
myhostname = mailserver.fqdn
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination =
myorigin = localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.5.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = 192.168.5.43, 127.0.0.1
inet_protocols = all

virtual_alias_maps = pcre:/etc/postfix/virtual

virtual_mailbox_base = /var/vmail
virtual_minimum_uid = 2222
virtual_transport = virtual
virtual_uid_maps = static:2222
virtual_gid_maps = static:2222
....

在/etc/postfix/虚拟:

/.*/     catchall
/catchall\@localhost/ catchall

其他机器配置为使用该邮件服务器作为中继主机,当邮件到达此处时,日志中将显示以下内容:

Nov 28 10:08:10 mailserver.fqdn postfix/error[23768]: 5EA9BBD9F5: to=<catchall@localhost>, orig_to=<[email protected]>, relay=none, delay=0, delays=0/0/0/0, dsn=5.1.1, status=bounced (User unknown in virtual alias table)

我可能忽略了一些明显的东西,是的存在吗alias_maps = hash:/etc/aliases

此外,如果一切顺利的话,我是否可以期望自动创建 catchall 邮箱,或者是否需要其他配置项?

答案1

您可以使用 测试结果。它应该返回。这里可能发生的情况是还包含,使其循环回到自身,最终无法解析为任何真实用户。postmap -q "[email protected]" pcre:/etc/postfix/virtualcatchall/.*/ catchallcatchall@localhost

如果您只有某个域及其子域,则使用以下方法会更安全:

/@((\w[\w\-]*)\.)+example\.com/ catchall

然后,使用以下方式处理本地主机的$local_transport邮件传递传输

mydestination = localhost

现在,您catchall@localhost可能是一个真正的本地用户,也可能是中定义的别名/etc/aliases

答案2

仅编辑/etc/postfix/virtual文件不足以使更改生效。您必须运行命令postmappostfix读取文件,如下所示:

/usr/sbin/postmap /etc/postfix/virtual

这将创建一个名为 的新文件/etc/postfix/virtual.db,并且别名现在被加载到 中postfix

相关内容