Python SMTP 错误代码处理 [英] Python SMTP error code handling

查看:149
本文介绍了Python SMTP 错误代码处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对此进行了大量搜索,但没有找到任何令人满意的内容.

I've searched a fair bit on this and couldn't come up with anything satisfactory.

我一直在尝试编写一个 Python 程序来监听电子邮件退回报告,并根据退回的原因以不同的时间间隔重新发送它们.

I've been trying to write a python program to listen for email bounce reports and depending on the reason for the bounce resend them at different intervals.

import smtplib
from smtplib import *

sender = 'foo@bar.com'
receivers = ['42@life.com']

message = """From: From Arthur <foo@bar.com>
To: To Deep Thought <42@life.com>
Subject: SMTP e-mail test
This is a test e-mail message.
"""

try:
  smtpObj = smtplib.SMTP('smtp.gmail.com',587)
  smtpObj.starttls()
  smtpObj.login(sender,'foo@bar.com')
  smtpObj.sendmail(sender, receivers, message)
  print "Successfully sent email"
except SMTPResponseException:
  error_code = SMTPResponseException.smtp_code
  error_message = SMTPResponseException.smtp_error
  print "Error code:"+error_code
  print "Message:"+error_message
  if (error_code==422):
    print "Recipient Mailbox Full"
  elif(error_code==431):
    print "Server out of space"
  elif(error_code==447):
    print "Timeout. Try reducing number of recipients"
  elif(error_code==510 or error_code==511):
    print "One of the addresses in your TO, CC or BBC line doesn't exist. Check again your recipients' accounts and correct any possible misspelling."
  elif(error_code==512):
    print "Check again all your recipients' addresses: there will likely be an error in a domain name (like mail@domain.coom instead of mail@domain.com)"
  elif(error_code==541 or error_code==554):
    print "Your message has been detected and labeled as spam. You must ask the recipient to whitelist you"
  elif(error_code==550):
    print "Though it can be returned also by the recipient's firewall (or when the incoming server is down), the great majority of errors 550 simply tell that the recipient email address doesn't exist. You should contact the recipient otherwise and get the right address."
  elif(error_code==553):
    print "Check all the addresses in the TO, CC and BCC field. There should be an error or a misspelling somewhere."
  else:
    print error_code+": "+error_message

我收到以下错误:

回溯(最近一次调用最后一次):文件C:/Users/VarunShijo/PycharmProjects/EmailBounce/EmailBounceTest.py",第 20 行,在error_code = SMTPResponseException.smtp_code AttributeError: 类型对象 'SMTPResponseException' 没有属性 'smtp_code'

Traceback (most recent call last): File "C:/Users/Varun Shijo/PycharmProjects/EmailBounce/EmailBounceTest.py", line 20, in error_code = SMTPResponseException.smtp_code AttributeError: type object 'SMTPResponseException' has no attribute 'smtp_code'

我在某处读到我应该尝试从 SMTPResponseException 类的实例中获取属性(即使 smtplib 文档说otheriwse)所以我也尝试过,但我不确定传递它的构造函数的参数是什么(代码,味精).

I read somewhere that I should be trying to get the attribute from an instance of the SMTPResponseException class (even though the smtplib documentation says otheriwse) so I tried that too, but I wasn't sure of what arguments to pass its constructor (code,msg).

有人可以把我推向正确的方向吗?

Could someone please nudge me in the right direction?

谢谢.

推荐答案

try with

except SMTPResponseException as e:
    error_code = e.smtp_code
    error_message = e.smtp_error

这篇关于Python SMTP 错误代码处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆