通过Return-Path头部检测退信信息

13

之前我看到一个关于检测退信邮件的问题:

我正在开发一个工具来发送大量消息(不是垃圾邮件 :)),需要添加一个功能来检测退信邮件。退信会有一个标准的响应吗?它会在邮件头还是正文中?By Santa, 2011-09-12


您不能依赖退信邮件的标题或正文来可靠地识别原始收件人,特别是如果您想自动化这个过程。即使您添加自己的自定义标题,退信服务器也很可能在将通知发送回给您时剥离它们.............................

在退信邮件中唯一完全不变的一条信息是返回路径电子邮件地址——您的服务器声明希望将退信发送到该地址。因此,自动化真正准确的退信捕获的唯一方法是直接将收件人编码到返回路径地址本身中。 这通常是通过覆盖每个发出的邮件的服务器默认返回路径地址,使用每个收件人的唯一值(例如bounce-XXXXX@yourdomain.com)来完成的,其中XXXXX是收件人电子邮件地址或某些内部标识符的编码和/或模糊表示。此技术需要使用可以支持此类通配符捕获所有地址的电子邮件服务器,以便您无需为要发送的每个电子邮件地址设置新的退信帐户。假设如此,您只需将服务器配置为将所有这些bounce-*邮件转储到您的脚本中,该脚本仅需要解码XXXXX以确定原始收件人是谁。 由 Alex Howansky 于2011年9月12日回答。

上述看起来是一个非常好的解决方案。 现在我的问题是:

如何配置Postfix(或其他任何)邮件服务器,将每封退信邮件从bounce@yourdomain.com帐户转储到一个脚本中,该脚本将解析并检索原始接收者的标识?脚本必须保存在邮件服务器的目录中,并在同一目录中转储消息吗?

第三方电子邮件服务提供商是否允许您配置用于转储消息的电子邮件帐户,并在服务器上安装脚本?

Sing

1个回答

16

顺便说一下,相关的标准称为VERP

你指的是bounce+token@yourdomain.com,而不仅仅是普通的bounce@yourdomain.com。这个token是使其唯一的关键!

只要在main.cf中配置了recipient_delimiter,Postfix将已经接受了给定有效地址a@example.neta+something@example.net邮件:

recipient_delimiter = +

配置Postfix以便将邮件发送到您的脚本并告知令牌有几种不同的方法。尝试以下步骤:

  1. 按照通常在该域中创建别名的方式创建地址bounce@yourdomain.com,例如创建一个常规别名或虚拟邮箱

  2. master.cf中创建一个自定义交付传输。 ${extension}表示脚本将接收在+之后的任何内容作为其第一个参数,并且<username>应该是脚本应该运行的本地uid。

bounce   unix  -       n       n       -       -       pipe
  flags=R user=<username> argv=/script/which/receives/bounces ${extension}
  • 如果您还没有交通地图,请创建一个:

  • transport_maps = hash:/etc/postfix/transport
    
    将以下行添加到/etc/postfix/transport文件中,以将bounce@yourdomain.com指向您在master.cf中创建的新传输代理:
  • Add the following line in /etc/postfix/transport to direct bounce@yourdomain.com to the new transport you created in master.cf:

  • bounce@yourdomain.com    bounce:
    
    重新构建传输映射:
    postmap /etc/postfix/transport
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接