我的任务是创建一个 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/virtual
catchall
/.*/ catchall
catchall@localhost
如果您只有某个域及其子域,则使用以下方法会更安全:
/@((\w[\w\-]*)\.)+example\.com/ catchall
然后,使用以下方式处理本地主机的$local_transport
邮件传递传输
mydestination = localhost
现在,您catchall@localhost
可能是一个真正的本地用户,也可能是中定义的别名/etc/aliases
。
答案2
仅编辑/etc/postfix/virtual
文件不足以使更改生效。您必须运行命令postmap
来postfix
读取文件,如下所示:
/usr/sbin/postmap /etc/postfix/virtual
这将创建一个名为 的新文件/etc/postfix/virtual.db
,并且别名现在被加载到 中postfix
。