在Amazon AWS上捕获Python中的SMTP异常

时间:2012-11-14 04:18:58

标签: python amazon-web-services smtp

我正在使用Python和smtplib通过Amazon SES发送电子邮件。如何捕获特定的发送错误?

例如,亚马逊SES可能会告诉我“此地址已被列入黑名单”或“您已超出您的费率”或“您已超出批量配额”,我想对这些消息采取行动。

我有一个片段可以抓住黑名单(我认为),如下所示。我真的不知道如何调试这些东西,因为例外只会出现在重型环境中,如果我触发异常,那么我担心亚马逊会把我的配额搞定。

try:
    msg = EmailMultiAlternatives(subject, plain, from_address, [to_address])
    msg.attach_alternative(html, "text/html")
    msg.send()
except smtplib.SMTPResponseException as e:
    error_code,error_msg = e.smtp_code, e.smtp_error
    if error_code==554 and error_msg=='Message rejected: Address blacklisted.':
        # do appropriate action for blacklisting
    else:
        # do appropriate action for throttling
    else:
        # log any other SMTP exceptions

1 个答案:

答案 0 :(得分:4)

您可以使用Amazon SES Mailbox Simulator生成黑名单错误。

发送电子邮件至blacklist@simulator.amazonses.com,以验证您的应用程序是否正确处理了由此产生的错误。如果您使用邮箱模拟器地址,您的退回统计信息将不会受到影响。无论您的Amazon SES帐户是沙盒还是生产模式,您都可以运行这些测试。

邮箱模拟器目前不允许您测试限制或配额例外。但是,您的异常处理代码应足以处理这些异常。我建议您使用find()检查异常字符串,以适应错误消息的任何添加。

if error_code == 554 and error_msg.find('Address blacklisted') >= 0:
    # handle blacklisting
else: 
    ...

作为参考,以下是您可以检查的一些SMTP响应:

  • 黑名单是“554邮件被拒绝:地址列入黑名单”
  • 未经验证的地址为“554邮件被拒绝:未验证电子邮件地址。”
  • 超出发送率是“454限制失败:超出最大发送速率。”
  • 超出配额是“454限制失败:超出每日邮件配额。”