2

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

例如,Amazon 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
4

1 回答 1

4

您可以使用Amazon SES 邮箱模拟器生成黑名单错误。

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

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

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

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

  • 黑名单是“554 邮件被拒绝:地址被列入黑名单”
  • 未验证地址为“554 邮件被拒绝:电子邮件地址未验证”。
  • Exceeded Send Rate 是“454 Throttling failure: Maximum sent rate exceeded”。
  • Exceeded Quota 是“454 限制失败:已超出每日邮件配额”。
于 2012-11-14T20:04:43.830 回答