大規模なメールインフラストラクチャはありませんが、大量の同報メールを素早く送信する必要があります。Amazon Simple Email Service (SES) と AWS Lambda を使って、大量の同報メールを送信するにはどうすればいいですか。

従来、大量の同報メールを送信するのに必要なハードウェア費用、ソフトウェアのライセンスコスト、および技術的専門知識は、コストが膨大にかかりました。アマゾン ウェブ サービステクノロジを使用すれば、社内メールインフラストラクチャを構築して維持管理をしていくのに必要な投資のほんの一部の投資をするだけで、大量の同報メールを素早く送信することができるようになります。 

Amazon SES と AWS Lambda を Amazon Simple Storage Service (S3) と組み合わせて使用することによって、HTML またはテキストベースのメールを大量の宛先に素早く送信することができます。この記事で説明するソリューションは、マルチパートまたは代替形式のメールを送信することもできます。


大量の同報メールを無効なメールアドレスに送信した場合、あなたの SES TCP/IP アドレスにはスパムメールサーバーのフラグが付けられる危険があります。スパムサーバーはインターネットサービスプロバイダー (ISP) が積極的にブラックリストに載せるので、あなたの SES IP アドレスがブラックリストに載ってしまった場合、ブラックリストを重視している ISP を使ってメールを送信することは不可能になります。したがって、このソリューションは無効なメールアドレスを持っている可能性がある大量の宛先にメールを送信する場合には、お勧めできません。

このソリューションでは、あなたが S3 バケットにパブリッシュするメーリングリストからメールアドレスのリストを素早く読み取ります。Lambda 関数はメールアドレスのリストを読み取って、これも S3 バケットに含まれている、前もってフォーマッティングされた html またはテキスト形式のメールを、メーリングリストに含まれている各宛先に対して送信します。

以下の手順に従って、このソリューションを実行してください。

  1. 5 分のタイムアウトを設定して、ses_mailer.py を AWS Lambda にデプロイします。この設定によって、Lambda の堅古な 5 分間のスクリプトタイムアウト時間内に、スクリプトのタイムアウトが発生することが保証されます。スクリプトのタイムアウト設定が 5 分を超える場合、S3 が Lambda を非同期に呼び出すことによって、予期しない動作が発生する可能性があります。それが、大部分の宛先には正常に配信できても、一部の宛先に対してはメールの配信が失敗する原因になります。
  2. S3 バケットを作成し、Lambda 関数をトリガーする S3 PUT Bucket 通知イベントを設定します。Lambda 関数に関連付けられたアクセス権限ポリシーによって、Lambda 関数を呼び出すための Amazon S3 権限が付与されていることを確認します。Lambda 関数が S3 バケットにアクセスするのに必要な権限についてさらに詳しく知りたければ、『チュートリアル: Amazon S3 における AWS Lambda の使用法』の「実装のサマリ」セクションを参照してください。
  3. S3 イベントの構成で、イベントのサフィックスには .gz を設定します。
  4. Lambda ロールが、S3 の読み書き権限とS3 バケットに対する ses:SendRawEmail 権限の両方を持っていることを確認してください。あなたの使用シナリオに相応しい Lambda 環境変数を構成します。たとえば、特定の使用例には、以下の変数が適しています。
    REGION=us-east-1, MAX_THREADS=10, TEXT_MESSAGE_FILE=email_body.txt, HTML_MESSAGE_FILE=email_body.html.
  5. html_message.html ファイルに HTML 形式のメールを書き込んで、それを S3 バケットにアップロードします。
  6. text_message.txt ファイルにプレーンテキスト版のメールメッセージを書き込んで、それを S3 バケットにアップロードします。
  7. メーリングリストを .CSV 形式で作成し、宛先情報が次の形式で指定されていることを確認します。文書の最初の行のヘッダーフィールドには何も書き込まないでください。 

    発信者名 、宛先名 、件名
  8. gzip を使用して、ファイルを圧縮します。たとえば、コマンド
    gzip -kf mailing_list_14032016.csv creates mailing_list_14032016.csv.gz
  9. 圧縮された .gzip ファイル mailing_list_14032016.csv.gz を S3 バケットにアップロードして、Lambda 関数をトリガーします。
  10. この関数によって、csv ファイル内のすべてのアドレスに対するメールの送信が開始され、エラーがあれば _error.log にログが記録されます。


宛先アドレスの数が数十万を超える場合、送信効率の改善のための追加手順を実行することができます。

  • メールリストを複数のより小さな csv ファイルに分割します。
  • MAX_THREADS 環境変数の値を増やします。ただし、この値は、あなたのアカウントの SES TPS の上限よりも小さな値である必要があります。

Lambda が SES 経由でメールを送信するために使用する ses_mailer.py ファイルは、AWS Labs Github リポジトリからダウンロードすることができます。

Amazon SES、AWS Lambda、Amazon S3、大量の同報メール、スパム、配信率、SPF、Amazon SES クエリ API、エラーロギング、並列処理、統計、通知


このページは役に立ちましたか? はい | いいえ

AWS サポートナレッジセンターに戻る

サポートが必要ですか?AWS サポートセンターをご覧ください。

公開日: 2016 年 12 月 30 日