通过 milter 捕获队列 ID 和 250 OK

通过 milter 捕获队列 ID 和 250 OK

我们有一个发送电子邮件的网络应用。现在,如果我们发送了一封电子邮件,并且它被退回(无论出于何种原因),没有人知道,因为它来自一个不回复的地址,该地址从未被检查过是否退回。

其中一些电子邮件非常重要,我们希望在界面中显示失败的电子邮件尝试。

我的想法是这样做:

  1. 向电子邮件中注入 X-Header:guid-goes-here 以唯一地标识它。
  2. 在 Postfix 中创建一个邮件过滤器,它将通过脚本运行电子邮件来解析该标题并(希望)同时捕获队列 ID。
  3. 解析 mail.log 中的该队列 ID 并获取其配置 (250 OK)。

对于 #2,当我创建邮件过滤器时,postfix 是否会在将邮件传送到脚本时注入队列 ID?我正处于此工作的早期阶段,尚未使其正常工作。此外,我已选择在后队列中使用 SMTP 内容过滤器(http://www.postfix.org/FILTER_README.html)。这是正确的选择吗?

答案1

只需使用一个地址作为实际监控的信封发件人。

像这样做:

  • 确保反弹@$yourdomain被传递到程序中(例如可能通过别名或 .forward)
  • 更改您的应用程序以使用此信封发件人方案发送邮件: 退回+收件人=收件人域名@$您的域名

如您所见,初始收件人(收件人@收件人域)被编码到您使用的发件人地址中。如果邮件被退回,它将被退回到退回+收件人=收件人域名@$您的域名——因此,根本不需要解析就可以找出被退回的地址!

这被称为 VERP,由 ezmlm 或 mailman 等邮件列表管理器使用:https://en.wikipedia.org/wiki/Variable_envelope_return_path

您提出的方法是有缺陷的,因为“250 OK”状态实际上并不表明邮件不会被后续中继退回!

相关内容