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

Sin*_*ing 12 email bouncedemail bounce

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

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


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

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

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

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

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

Cel*_*ada 14

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

你的意思是bounce+token@yourdomain.com,不只是简单bounce@yourdomain.com.令牌是让它独一无二的!

只要您配置了in,Postfix就已经接受了a+something@example.net给定有效地址的邮件:a@example.netrecipient_delimitermain.cf

recipient_delimiter = +
Run Code Online (Sandbox Code Playgroud)

有几种不同的方法来配置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}
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果您还没有传输地图,请创建一个传输地图:

    transport_maps = hash:/etc/postfix/transport
    
    Run Code Online (Sandbox Code Playgroud)
  4. 添加以下行以/etc/postfix/transport指向bounce@yourdomain.com您在其中创建的新传输master.cf:

    bounce@yourdomain.com    bounce:
    
    Run Code Online (Sandbox Code Playgroud)
  5. 重建传输地图:

    postmap /etc/postfix/transport
    
    Run Code Online (Sandbox Code Playgroud)