当您使用电子邮件系统发送自动回复时,您需要注意不要发送对自动生成的电子邮件的回复。充其量,您将收到无用的传递失败消息。更有可能的是,您最终会遇到无限的电子邮件循环和混乱的世界。事实证明,可靠地检测自动生成的电子邮件并不总是那么容易。以下是基于为此编写检测器并使用它扫描大约100,000封电子邮件(大量个人和公司档案)的观察结果。自动提交标头由RFC3834定义。这是指示您的电子邮件是自动回复的“官方”标准。如果存在Auto-Submitted标头并且其值不是no,则不应发送回复。X-Auto-Response-Suppress标头由Microsoft定义。此信头由MicrosoftExchange、Outlook和其他一些产品使用。许多新闻提要等都有这个集合。如果X-Auto-Response-Suppress包含DR(“抑制投递报告”)、AutoReply(“抑制OOF通知以外的自动回复消息”)或All,您不应发送回复。List-Id和List-Unsubscribe标头由RFC2919定义。您通常不希望向邮件列表或时事通讯提要发送自动回复。几乎所有邮件列表和大多数新闻提要都至少设置了其中一个标题。如果存在这些标头中的任何一个,则不应发送回复。此标头的值并不重要。Feedback-ID标头由Google定义。Gmail使用此标头来识别邮件是否为新闻源,并为这些新闻源的所有者生成统计信息或报告。如果此标头存在,则不应发送回复。此标头的值并不重要。非标准方式上述方法定义明确(即使有些是非标准的)。不幸的是,一些电子邮件系统不使用它们中的任何一个:-(这里有一些额外的措施。Precedence标头在RFC2076中没有真正定义并且不鼓励使用它(但它经常遇到)。请注意检查是否存在不建议使用此标头,因为某些消息使用正常值和一些其他(不常见的)值(尽管这不常见)。我的建议是匹配bulk,auto_reply如果其值不区分大小写或列表,则不回复发送。其他不常见的信头这是我遇到的其他一些(不常见的)信头。如果设置了其中之一,我建议不要发送自动回复。大多数邮件还设置了上述标题之一,但有些没有(这并不常见)。X-MSFBL:真的找不到定义(Microsoft信头?),但我只有自动生成的带有此标头的邮件。X-Loop:在任何地方都没有真正定义,有点罕见,但有时会有。通常设置为不应该接收邮件的地址,还会遇到X-Loop:yes。X-Autoreply:相当罕见,并且似乎总是具有肯定的价值。电子邮件地址检查From或Reply-To标头是否包含noreply、no-reply或no_reply(正则表达式:^no.?reply@)。只有HTML部分如果电子邮件只有HTML部分而没有文本部分,则表明这是一封自动生成的邮件或新闻源。几乎所有的邮件客户端都有一个文本部分集。传递失败消息许多传递失败消息并不真正表明它们是失败的。一些检查方法:来自包含邮件守护程序或邮件传递子系统特定的邮件库功能许多邮件类库留下某种痕迹,大多数常规邮件客户端用自己的数据覆盖它。检查这似乎相当可靠。X-Mailer:MicrosoftCDOforWindows2000:由某些Microsoft软件设置;我只能在自动生成的邮件中找到它。是的,在2015年它仍在使用。Message-ID标头包含.JavaMail.:我发现了一些(5条50k大小的)常规消息,但数量不多;绝大多数(数千)是时事通讯订阅、订单确认等。^X-Mailer以PHP开头。这应该同时看到X-Mailer:PHP/5.5.0和X-Mailer:PHPmailerXXXXXX。与“JavaMail”相同。有X-Library;只有Indy似乎有这套。X-Mailer以wdcollect开头。由一些Plesk邮件程序设置。X-Mailer以MIME工具开始。最后的预防措施:限制回复的数量即使您遵循了上述所有建议,您仍然可能会遇到可以避开所有这些检测的电子邮件程序。这可能非常危险,因为电子邮件系统只是“发送电子邮件(如果可用)”,可能会导致无限的电子邮件循环。出于这个原因,我建议您记录自动发送的电子邮件,并将此速率限制为几分钟内最多发送几封电子邮件。这将打破循环链。我们使用每五分钟一封电子邮件的设置,但限制较少的设置可能效果很好。自动回复器所需标头的具体细节取决于您发送的电子邮件类型。这是我们用于自动回复电子邮件的内容:Auto-Submitted:auto-repliedX-Auto-Response-Suppress:AllPrecedence:auto_reply
