如何在Python中检测“退回”的电子邮件回复和其他自动回复失败的传递尝试?
我正在实现一个简单的服务器来在自定义Web应用程序中的电子邮件和注释之间中继邮件。因为我的评论模型支持“全部回复”功能,如果评论帖子中的两封电子邮件无效,可能会有一个无限的电子邮件链,我的系统会发送一封电子邮件,收到一封退回电子邮件,转发给其他人无效的电子邮件,收到回复电子邮件,无条件地将其转发给第一封电子邮件。
我想避免这种情况。是否有标准错误代码用于我可以检查的退回或拒绝的电子邮件,理想情况下是使用Python的imaplib
包?
答案 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-Submitted
或X-Loop
标题字段,或者包含类型的正文部分的邮件做出反应多部分/报告。
您可能还想在外发邮件上指定Auto-Submitted: auto-generated
。我希望如果你这样做,马克斯说我会解决这个问题,但自动提交并不昂贵。