如何在Django 1.10中捕获电子邮件发送异常

时间:2017-01-04 06:30:35

标签: django python-3.5

我在我的应用程序中的不同位置发送电子邮件。

msg.send(fail_silently=True)

有助于避免在发送电子邮件时出现错误时向最终用户显示错误页面。是否可以捕获此错误以便我创建日志或执行自定义函数?

注意: 我正在使用Django 1.10.4和Python 3.5。

2 个答案:

答案 0 :(得分:6)

正如它在send_emailhttps://docs.djangoproject.com/en/1.10/topics/email/#send-mail)的Django文档中所述:

  

fail_silently :布尔值。如果它为False,send_mail将引发smtplib.SMTPException。请参阅smtplib文档以获取可能的异常列表,所有这些异常都是SMTPException的子类。

所以你可以这样做:

from smtplib import SMTPException

try:
    msg.send()
except SMTPException as e:
    print('There was an error sending an email: ', e) 

答案 1 :(得分:0)

试试这个!它将涵盖任何类型的可能错误。

from smtplib import SMTPException

try:
    send_mail(subject, message, from_email, [to_email], fail_silently=False)

except BadHeaderError:              # If mail's Subject is not properly formatted.
    print('Invalid header found.')
except SMTPException as e:          # It will catch other errors related to SMTP.
    print('There was an error sending an email.'+ e)
except:                             # It will catch All other possible errors.
    print("Mail Sending Failed!")