2015-11-05 159 views
1

我已经在这方面搜索了一点点,不能拿出任何满意的东西。Python的SMTP错误代码处理

我一直在试图编写一个python程序来侦听电子邮件反弹报告,并根据反弹原因以不同的时间间隔重新发送它们。

import smtplib 
from smtplib import * 

sender = '[email protected]' 
receivers = ['[email protected]'] 

message = """From: From Arthur <[email protected]> 
To: To Deep Thought <[email protected]> 
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,'[email protected]') 
    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 [email protected] instead of [email protected])" 
    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 

对此我得到以下错误:

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)的实例获取属性所以我也试过,但我不确定通过它的构造函数(代码,味精)是什么参数。

请问有人能推动我朝着正确的方向发展吗?

谢谢。

回答

0

尝试

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

太谢谢你了!这工作。如果我理解正确,那么通过在发生异常时隐式地将参数传递给构造函数来处理实例化,对吗? –

+0

你好。异常在引发时被实例化。我提供的代码只是说python为它创建一个名称。属性由异常类的构造函数设置。请看看[这个SO QA](http://stackoverflow.com/questions/1319615/proper-way-to-declare-custom-exceptions-in-modern-python) – Pynchia