如何捕获SMTPRecipientsRefused异常(使用远程SMTP服务器和django)?

时间:2011-09-09 13:40:24

标签: python django smtp

我试图了解它是如何工作的。

当我通常发送和发送电子邮件并且收件人不存在或发生其他错误时,会发回一封电子邮件,其中包含有关错误和状态的信息。这可能需要一些时间。

我的问题是,如果这个响应需要时间,smtplib如何能够发现这个错误? 当我使用smtplib发送电子邮件时,它永远不会引发SMTPRecipientsRefused异常。它只是发送电子邮件,之后,当故意使用无效的电子邮件地址时,我在回复电子邮箱中收到“传递给以下收件人永久失败:”错误。这对我没有帮助,因为我正在尝试从无效的电子邮件地址清理我的电子邮件地址数据库。

有验证功能:

SMTP.verify(address)

但我不相信这是一个真正的选择。关于VRFY的python docs注意事项:
“许多网站禁用SMTP VRFY以阻止垃圾邮件发送者。”

关于我的测试环境的说明:我正在使用django和远程SMTP服务器(gmail / apps)。
Q1:这是不能发现错误的原因吗?我应该使用本地服务器吗?

Q2:除了从回复邮箱解析我的实际错误电子邮件之外,有没有办法做到这一点?

提前感谢您对此事的任何想法!

2 个答案:

答案 0 :(得分:0)

是的,遗憾的是,很多年以来,SMTP VRFY已在大多数服务器上被禁用,因为垃圾邮件发送者可以使用它来快速搜索服务器以获取有效的电子邮件。你必须手动或刮掉电子邮件。 python-imap会帮助你。祝你好运!

答案 1 :(得分:0)

  1. 是的,这就是为什么你没有得到例外。使用本地服务器无济于事,因为您的本地服务器不知道给定的电子邮件地址是否有效。只有目标域的MX邮件服务器有任何线索,而且通常很难在很久之后告诉你。
  2. 不是。正如另一个答案所示,尝试使用Python的imaplibpoplib来帮助您检索退回邮件。
  3. 不知道您的申请是什么,但如果您有相关网站,则另一个选择是在登录时定期询问您的用户以验证/更新他们的电子邮件地址。