我正在尝试向 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 不支持标头。
另一种方法是使用信封地址而不是电子邮件标题中的地址。为此,您可以使用名为限制类的后缀功能。请参阅
- http://www.postfix.net/postconf.5.html#smtpd_restriction_classes
- http://www.postfix.net/RESTRICTION_CLASS_README.html。
在 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