通过Return-Path标头检测退回邮件

时间:2012-02-01 22:33:53

标签: email bounce bouncedemail

前段时间我看到了一个关于检测退回邮件的问题:

我正在开发一个发送批量邮件(而不是垃圾邮件)的工具,我需要添加一个可以检测退回邮件的功能。是否存在与跳出相关的标准响应?它会在身体的标题中吗? By Santa,2011-09-12


您不能依赖退回邮件的标题或正文来能够可靠地识别原始收件人,尤其是如果您想要自动执行该过程。即使您添加自己的自定义标头,弹出服务器也可能会在向您发送通知时将其删除......................... ....

唯一一条在反弹中完全不受影响的信息是返回路径电子邮件地址 - 您的服务器宣传它要发送的跳出地址。因此,自动执行真正准确的反弹捕获的唯一方法是将接收者直接编码到返回路径地址本身。 这通常通过覆盖每个外发邮件的服务器默认返回路径地址来完成,使用每个收件人的唯一值,例如bounce-XXXXX@yourdomain.com,其中XXXXX是收件人电子邮件地址的某些编码和/或模糊表示或一些其他内部标识符。此技术需要使用可以支持此类外卡全能地址的电子邮件服务器,这样您就不必为要发送到的每个电子邮件地址设置新的退回帐户。假设您只是将服务器配置为将所有此类bounce- *电子邮件转储到您的脚本,这只需解码XXXXX以确定原始收件人是谁。 回答2011年9月12日Alex Howansky

上述似乎是一个很好的解决方案。 现在我的问题是:

如何配置Postfix(或任何其他)邮件服务器,将每个退回的电子邮件从bounce@yourdomain.com帐户转储到将解析和检索原始收件人身份的脚本?是否要将脚本保存在邮件服务器中的目录中,将转储的邮件保存在同一目录中?

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

1 个答案:

答案 0 :(得分:14)

顺便提一句,相关标准称为VERP

您的意思是bounce+token@yourdomain.com,而不仅仅是bounce@yourdomain.com。令牌是它独特的原因!

只要您在a+something@example.net中配置a@example.net,只要您配置有效地址recipient_delimiter,Postfix就会接受main.cf的邮件:

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}
    
  3. 如果您还没有传输地图,请创建一个传输地图:

    transport_maps = hash:/etc/postfix/transport
    
  4. /etc/postfix/transport中添加以下行,将bounce@yourdomain.com定向到您在master.cf中创建的新传输:

    bounce@yourdomain.com    bounce:
    
  5. 重建传输地图:

    postmap /etc/postfix/transport