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

Posted

技术标签:

【中文标题】通过 Return-Path 标头检测退回的邮件【英文标题】:Detecting bounced messages by Return-Path header 【发布时间】:2012-02-24 15:21:08 【问题描述】:

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

我正在开发一个可以发送大量邮件(不是垃圾邮件:)的工具,我需要添加一个功能来检测退回的邮件。是否有与退回相关的标准响应?它会在正文的标题中吗? 作者:圣诞老人,2011-09-12


您不能依靠退回邮件的标头或正文来可靠地识别原始收件人,尤其是在您想要自动化流程时。即使您添加了自己的自定义标头,弹跳服务器也可能会在将通知发送回您时将其剥离...................... ....

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

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

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

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

唱歌

【问题讨论】:

【参考方案1】:

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

你的意思是bounce+token@yourdomain.com,而不仅仅是简单的bounce@yourdomain.com。令牌是使它独一无二的原因!

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

recipient_delimiter = +

有几种不同的方法可以配置 Postfix,以便它将邮件传递到您的脚本并告诉您令牌是什么。试试这个:

    创建地址 bounce@yourdomain.com 的方式与通常在该域中创建别名的方式相同:例如常规别名或虚拟邮箱

    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 中创建的新传输:

    bounce@yourdomain.com    bounce:
    

    重建交通地图:

    postmap /etc/postfix/transport
    

【讨论】:

以上是关于通过 Return-Path 标头检测退回的邮件的主要内容,如果未能解决你的问题,请参考以下文章

在通过 .NET 发送的电子邮件中设置 Return-Path 的方法是啥?

后缀重写的 Return-Path 标头

Return-Path 标头的正确格式

将退回的电子邮件错误接收到特定的电子邮件地址

PHP Mailer --- 回复:--- Return-path --- SetFrom

通过电子邮件标头检测电子邮件正文语言的可能性