我设置了 Postfix 邮件网关,想更改收件人地址。我希望所有邮件都转发到 而[email protected]
不是 转发到[email protected]
我已经使用 Postfix 配置了smtp_generic_maps
(如下所示),但这仅适用于在 Postfix 服务器本身上生成的邮件。通过 Postfix 服务器转发的任何邮件仍然会[email protected]
有效地忽略smtp_generic_maps
。我应该研究什么配置来实现这一点?
# grep smtp_generic_maps main.cf
smtp_generic_maps = hash:/etc/postfix/generic
# postmap /etc/postfix/generic
# service postfix reload
# cat /etc/postfix/generic
[email protected] [email protected]
答案1
你不应该用smtp_generic_maps
这个
这Postfix 地址重写自述文件描述了 的正确用法smtp_generic_maps
:
使用
smtp_generic_maps
参数可以指定通用(5)当邮件通过 SMTP 离开机器时,查找表会用有效的 Internet 地址替换本地邮件地址。通用(5)映射取代了信封和邮件头地址,并且是非递归的。在本地机器上的地址之间发送邮件时不会发生这种情况。
您正尝试使用它(而不是像 一样替换本地地址[email protected]
)来替换带有 FQDN 的地址[email protected]
。由于yahoo.com
未在 中配置,因此mydestination
不被视为本地域,因此不会被处理通用(5)映射。
但是,您不应该将其他人的域配置为本地域,因为它实际上应该由smtp(8)而是使用投递代理。这样做会阻止任何用户向任何@yahoo.com
地址发送邮件。这种篡改在技术上是不正确的,甚至可能是非法的。
通过以下方式引导用户了解公司政策check_recipient_access
如果问题是某人试图向您的 CEO 发送个人电子邮件@yahoo.com
,而您想阻止这种情况并强制使用公司电子邮件[email protected]
,您可以添加check_recipient_access
限制main.cf
:
smtpd_recipient_restrictions =
...
check_recipient_access hash:/etc/postfix/denied_recipients,
...
permit
然后添加一个具有人类可读原因的拒绝/etc/postfix/denied_recipients
:
[email protected] REJECT The CEO must be contacted using official <[email protected]> address.
(正如我hash:
在示例中所使用的,不要忘记postmap /etc/postfix/denied_recipients
。)
使用运输(5)覆盖 Postfix 内置默认值的表
为了使所有内容[email protected]
都能交付给您,[email protected]
您可以使用transport_maps
而不是smtp_generic_maps
。
描述
可选 运输(5) 表指定从电子邮件地址到消息传递传输和下一跳目的地的映射。文件中定义了消息传递传输(例如本地或 smtp)
master.cf
,下一跳目的地通常是主机或域名。该表由以下项搜索:简单重写(8)守护进程。此映射覆盖了
transport:nexthop
Postfix 内置的默认选择。
添加transport_maps
到您的/etc/postfix/main.cf
:
transport_maps = hash:/etc/postfix/transport
然后添加/etc/postfix/transport
一行来改变[email protected]
默认值transport:nexthop
:virtual:[email protected]
[email protected] virtual:[email protected]
yahoo.com :
* :
其他行只是表明没有进行任何修改,yahoo.com
其余部分则恢复为默认transport:nexthop
行为。