我们有一个后缀服务器,它接收来自应用服务器的邮件。发件人采用user@host.fqdn格式( host.fqdn可以根据源服务器的不同而有所不同),收件人可以是内部用户,也可以是外部用户。
发送给外部用户的消息应该将发件人更改为user@domain.com。我尝试过使用规范映射,但是由于这是由清理守护进程处理的,所以在做出任何传输决定之前,它将影响所有发件人地址。
我还尝试创建具有泛型映射的自定义smtp传输,并配置transport_maps以将该自定义smtp传输用于外部域。但是,泛型映射会同时影响发件人和收件人地址。
最后,我尝试了以下几点:
但是,很明显,每个后缀实例只能使用一个传输表。
为了适应这种重写,我希望避免创建一个全新的Postfix实例。有什么建议吗?(并预先感谢)
发布于 2014-12-27 08:56:46
免责声明:当进程电子邮件中包含多个内部和外部域的收件人时,此答案将无法正常工作。
使用后缀多实例,解决方案将是微不足道的。只需将transport_maps
设置为第二个实例,然后在第二个实例中进行重写。
如果没有多个实例,则需要两个smptd进程、两个清理进程和存取图.The思想,即在访问映射中进行过滤,而不是在transport_maps中进行过滤。当电子邮件有外部域收件人时,它会传输到第二个smtpd守护进程。然后,第二个smtpd守护进程将调用第二个清理守护进程。第一个清理守护进程将不具有规范的map参数,而在第二个清理守护进程中,我们将添加该参数来进行重写。
在main.cf中,在smtpd_*_restriction中定义check_recipient_access。例如:
smtpd_recipient_restriction =
...
check_recipient_access hash:/etc/postfix/external-filter
...
在external-filter
文件中定义过滤机制
external.example.com FILTER smtp:[127.0.0.1]:12525
在本例中,我们将在127.0.0.1端口12525中设置第二个smtpd守护进程侦听程序。
现在,在master.cf
中设置第二个smtpd和清理守护进程。
[127.0.0.1]:12525 .... smtpd -o cleanup_service_name=cleanup_rewrite
cleanup_rewrite .... cleanup -o canonical_maps=hash:/etc/postfix/mysender_rewriting
文件mysender_rewriting
将包含您想要的发送方映射。
https://serverfault.com/questions/457934
复制相似问题