基本上我想要做的是使用 header_checks 重写发件人:标题,但前提是邮件发送到某个域。
header_check 的问题在于我无法检查 To: 和 From: 标题的组合。
现在我想知道是否可以将 header_checks 与 smtpd_restriction_classes 或类似的东西结合使用。
我在网上搜索时发现了很多有关 header_checks 和多个 header 字段的信息。所有这些信息基本上都告诉我,不能将两个 header 组合起来进行检查。但我没有找到任何信息,说明是否可以仅在满足某个条件(例如,邮件发送到 example.com)时才进行 header 检查。
编辑:
在进行更多研究时,我发现了以下内容文章建议在 postfix master.cf 中添加一个服务,使用 transportmap 将域的邮件传递给该服务,并使用 -o 定义单独的 header_check。
问题是我无法让它工作......
到目前为止我所做的就是将服务添加到master.cf:
example unix - - n - - smtpd
-o header_checks=regexp:/etc/postfix/check_headers_example
将以下行添加到传输图中:
example.com example:
最后但并非最不重要的一点是,我有两个用于标头检查的正则表达式文件,一个用于新添加的服务,一个用于将答案重定向到重写的域。
check_headers_示例:
/From:(.*)@mydomain.ain>(.*)/ REPLACE From:[email protected]>$2
显然如果有人回答,邮件就会进入涅槃状态,因此我在主 postfix 进程中定义了以下 check_headers:
/To:(.*)<(.*)@mydomain.example.com>(.*)/ REDIRECT [email protected]$2
不知何故,传输被忽略了。任何帮助都值得感激。
编辑2:
我仍然被困住了...我确实尝试了以下操作:
smtpd_restriction_classes = header_rewrite
header_rewrite = regexp:/etc/postfix/rewrite_headers_domain
smtpd_recipient_restrictions = (some checks) check_recipient_access hash:/etc/postfix/rewrite_table, (more checks)
存在rewrite_table
以下条目:
/From:(.*)@mydomain.ain>(.*)/ REPLACE From:[email protected]>$2
我得到的只是NOQUEUE: reject: 451 4.3.5 Server configuration error
。我找不到任何关于如何做到这一点的资源,但有些人说这是不可能的。
编辑3:
我问这个问题的原因是,我们有一位客户(假设为 customer.com),他使用一些别名将邮件转发到一个域,假设为 example.com。
example.com 的邮件服务器不接受来自发件人@example.com 的任何外部服务器的邮件。
因此,从 example.com 发往[电子邮件保护]最终都会被拒绝。
example.com 的邮件服务器不可能出现异常。
我们并没有真正解决这个问题,但会尝试使用列表(mailman)而不是别名来解决这个问题。但这不是一个好办法,也不是真正的解决方案。
我将非常感激所有关于如何以适当方式完成此事的建议。
答案1
我不确定您是否能够实现您想要的。我正在测试类似的东西,需要在每个域的基础上进行关键字过滤等,并且能够在每个域上使用 header_checks,或者使用 postfix 的多实例功能对我想要的域使用 header_checks。
您创建一个实例,只需更改该特定实例上的 smtp 端口。您在主实例上使用 transport_maps 将特定域的电子邮件路由到辅助实例的 smtp 端口。并在那里执行所有 header_checks 并转发电子邮件!
干杯!
答案2
您可以设置一个新服务器,使用传输文件路由您想要处理的所有域,然后在新服务器上应用 header_checks 规则。