我正在使用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
答案 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响应: