メールインフラガイド
PythonでメールAPIを使う方法
Flask、Django、FastAPI、またはワーカーからトランザクションメールを送信するための、バックエンドで安全に使える実装パターンです。
Pythonのサービスでは、信頼できるサーバーコードからメールを送信し、入力をバリデーションし、レスポンスのIDを記録します。配信処理でリクエストをブロックしたくない場合はタスクキューを使います。
実務での意味
- 環境で管理する認証情報
- バリデーション済みのメッセージペイロード
- 再試行に対応した非同期処理またはキュー処理
- メッセージIDを含む構造化ログ
実装チェックリスト
- APIキーはシークレットマネージャーまたは環境変数から読み込みます。
- リクエストを送る前にメッセージの各フィールドをバリデーションします。
- タイムアウトを設定し、再試行できる失敗を分類します。
- 返されたプロバイダーのメッセージIDを保存します。
- 送信量が増えてきたら、急ぎでないメールはキューワーカーに移します。
よく寄せられる質問
PythonからはSMTPとHTTPのメールAPIのどちらを使うべきですか?
どちらでも動作しますが、HTTP APIのほうが認証がわかりやすく、JSONペイロードや構造化された配信レスポンスを扱えることが多いです。
再試行はどのように行うべきですか?
通信エラーやレート制限による失敗はバックオフを入れて再試行します。重複送信を引き起こす可能性のある失敗は、自動的に繰り返さないでください。