Postfix:如何根据发件人重定向单个电子邮件地址

Postfix:如何根据发件人重定向单个电子邮件地址

我正在尝试向 Postfix 添加一条规则。

我的目标如下:当任何人除了([电子邮件保护]) 发送电子邮件至 ([电子邮件保护])转发至([电子邮件保护])。 如果[电子邮件保护]发送邮件时,只需允许其通过即可。总结一下,如果发件人没有[电子邮件保护],将邮件重定向至[电子邮件保护]. 如果发件人是[电子邮件保护],请勿重定向。

供参考,[电子邮件保护]是一个别名,在 /etc/postfix/virtual 中定义,可发送给多个收件人。

我正在使用 pcre header_checks,但它根本不起作用——什么都没有发生,所有邮件都像以前一样流动,没有被重定向。

如果有更好/更简单的方法来做到这一点,我洗耳恭听!

因此,按照这个帖子这个帖子我在 main.cf 和 headers_check 中添加了以下几行:

主文件:

header_checks = pcre:/etc/postfix/headers_check

/etc/postfix/headers_check

/To:[email protected]/ && /From:(?([email protected]).)*/ REDIRECT [email protected]

但是,什么都没发生。所有邮件仍然被放入[电子邮件保护]。我删除了“发件人”检查,看看是否可以抓取所有发送到[电子邮件保护]并重定向。但是,这也不起作用。我运行了

postmap -q "From:[email protected]\nTo:[email protected]" pcre:/etc/postfix/headers_check

并收到回复

&& /(?([email protected]).)*/ REDIRECT [email protected]

我还重新启动了 postfix(postfix reload)以确保它已加载配置。

另外,请注意,这是一台拥有大量虚拟主机的机器,每个虚拟主机都有自己的电子邮件地址和别名。所有这些都合并在 /etc/postfix/virtual 中。

感谢您对如何实现这一目标的任何建议!

答案1

我不知道为什么这个答案已被接受并获赞成。Postfix 文档明确指出 Postfix 每次只检查一个标题行。

这些规则每次作用于一个逻辑消息头或一个正文行。对一行做出的决策不会延续到下一行。

所以你的想法是Postfix 不支持标头。


另一种方法是使用信封地址而不是电子邮件标题中的地址。为此,您可以使用名为限制类的后缀功能。请参阅

在 main.cf 中添加此行

smtpd_restriction_classes = specialsender
specialsender = permit
smtpd_recipient_restrictions = 
    ...
    check_sender_access hash:/etc/postfix/mycompany.redirection,
    check_recipient_access  hash:/etc/postfix/redirect.sales
    ...

内容/etc/postfix/mycompany.redirection

[email protected]     specialsender

内容/etc/postfix/redirect.sales

[email protected]      REDIRECT [email protected]

怎么运行的

当 postfix 遇到此行时

check_sender_access hash:/etc/postfix/mycompany.redirection

并发现[电子邮件保护]在 specialsender 类中,则 postfix 允许它而不进行重定向。将根据另一个电子邮件地址进行检查

check_recipient_access  /etc/postfix/redirect.sales

如果收件人==[电子邮件保护],它将被重定向到[电子邮件保护]

相关内容