2

Python と smtplib を使用して、Amazon SES 経由で E メールを送信しています。特定の送信エラーをキャッチするにはどうすればよいですか?

たとえば、Amazon SES から「このアドレスはブラックリストに登録されています」、「レートを超えました」、または「ボリューム クォータを超えました」と通知されることがあります。私はそれらのメッセージに対応したいと考えています。

次のように、ブラックリストをキャッチするスニペットがあります(と思います)。例外は過酷な環境でしか表示されないため、これらをデバッグする方法がよくわかりません。また、例外をトリガーすると、Amazon が割り当てを減らしてしまうのではないかと心配しています。

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 Mailbox Simulatorを使用して、ブラックリストエラーを生成できます。

アプリケーションが結果のエラーを適切に処理するかどうかを確認するために、blacklist@simulator.amazonses.comに電子メールを送信してください。メールボックスシミュレータアドレスを使用する場合、バウンス統計は影響を受けません。これらのテストは、AmazonSESアカウントがサンドボックスモードか本番モードかに関係なく実行できます。

メールボックスシミュレータでは、現在、スロットリングまたはクォータの例外をテストすることはできません。ただし、例外処理コードは、これらの例外を処理するのに十分である必要があります。find()エラーメッセージへの追加に対応するために、を使用して例外文字列を確認することをお勧めします。

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

参考までに、確認できるSMTP応答の一部を次に示します。

  • ブラックリストは「554メッセージが拒否されました:アドレスがブラックリストに登録されました」です
  • 未確認のアドレスは「554メッセージが拒否されました:メールアドレスが確認されていません」です。
  • Exceeded SendRateは「454Throttlingfailure:Maximumsendrateexceeded」です。
  • Exceeded Quotaは、「454スロットリングの失敗:1日のメッセージクォータを超えました」です。
于 2012-11-14T20:04:43.830 に答える