是否可以在后缀下使用milter来实现SPF?
在我看来,这是不可能的,因为后缀管理米尔特的方式。
根据后缀文档,milter 位于消息处理链中:
网络 => 后缀 smptd 进程 => MILTER => 后缀 smtpd 进程 => 等。
假设 milter 从后缀 smtpd 获取其消息,则 milter 将看到其初始连接来自后缀的 IP 地址。这意味着 milter 不知道原始发件人的 IP 地址。
SPF 需要发件人的 IP,因此似乎不可能从后缀 milter 中执行正确的 SPF 验证。
这似乎正是我在后缀服务器中安装测试器时发生的情况。
我是否正确,或者有人能够通过后缀米尔特实现 SPF?
提前谢谢。
Sendmail/Postfix 在传入的 SMTP 会话期间执行给定 milter 提供的回调。 Postfix 可能会根据回调结果拒绝某些 SMTP 命令。
后缀队列前 Milter 支持
Postfix 实现了对 Sendmail 版本 8 Milter(邮件过滤器)协议的支持。在 MTA 外部运行的应用程序使用此协议来检查 SMTP 事件(连接、断开连接)、SMTP 命令(HELO、邮件发件人等)以及邮件内容(标头和正文)。所有这些都发生在邮件排队之前。
https://en.wikipedia.org/wiki/Milter
好的。我现在更了解这个问题了。显然,我正在使用的 milter 实现没有正确设置 {client_addr}。我假设我的问题在于我正在使用的底层 milter 实现(pymilter 的最新版本)。
另外,我发现我可以按如下方式解决此问题:postfix 将客户端的主机名和 IP 地址放入它在将消息发送到 milter 之前设置的最顶层"已接收"标头中。因此,我可以解析milter中的第一个"已接收"标头,以获取SPF所需的客户端地址。