如何检测退回电子邮件

时间:2017-05-04 12:24:30

标签: python email imap

如何在Python中检测“退回”的电子邮件回复和其他自动回复失败的传递尝试?

我正在实现一个简单的服务器来在自定义Web应用程序中的电子邮件和注释之间中继邮件。因为我的评论模型支持“全部回复”功能,如果评论帖子中的两封电子邮件无效,可能会有一个无限的电子邮件链,我的系统会发送一封电子邮件,收到一封退回电子邮件,转发给其他人无效的电子邮件,收到回复电子邮件,无条件地将其转发给第一封电子邮件。

我想避免这种情况。是否有标准错误代码用于我可以检查的退回或拒绝的电子邮件,理想情况下是使用Python的imaplib包?

3 个答案:

答案 0 :(得分:1)

Wikipedia在此问题上有一些很好的信息。 RFC6522为来自SMTP服务器的任何管理邮件提供错误500 的错误代码 您可以尝试使用错误500 侦听错误消息。这应该工作。
引用维基百科,

  

管理消息报告的格式由以下内容定义   RFC 6522.DSN可以是由组成的MIME多部分/报告消息   三部分:

     

人类可读的解释;一台可解析的机器   message / delivery-status,“name:type; value”列表   陈述几个可能的领域;和原始信息,或一部分   其作为message / rfc822类型的实体。 DSN的第二部分   也很可读。了解哪个MTA播放至关重要   哪个角色。 Reporting-MTA负责撰写和发送   DSN。

     

当Remote-MTA在SMTP事务期间拒绝邮件时,a   字段诊断 - 类型为smtp的代码可用于报告该值。   请注意,除了数字3位数值之外,还有SMTP响应   包含一个人类可读的部分。信息

     

Remote-MTA:dns; smtp.store.example [192.0.2.3]诊断代码:smtp;   550这里没有这样的用户有时被报告为例如在与之交谈时   smtp.store.example [192.0.2.3]   RCPT TO:<<< 550这里没有这样的用户

我不确定imaplib,因为我是Python的初学者。

答案 1 :(得分:1)

您的SMTP信封地址不应与RFC822 From Header地址相同。然后任何SMTP错误都会转到退回地址,但任何真正的电子邮件都会转到发件人地址。邮件列表管理员使用VERP来检测问题,方法是使用不同的邮件地址进行每次投放。

答案 2 :(得分:0)

避免对Return-Path不在From中,或包含Auto-SubmittedX-Loop标题字段,或者包含类型的正文部分的邮件做出反应多部分/报告。

您可能还想在外发邮件上指定Auto-Submitted: auto-generated。我希望如果你这样做,马克斯说我会解决这个问题,但自动提交并不昂贵。