AWS SESの概要と一斉送信についてのメモ

SESの概要

AWSが提供するメールサービス。SESを使用すると、開発者や企業は大量のメールを簡単に送信できる。主な特徴は以下。

  1. スケーラビリティ:SESは自動的にスケーリングするため、少数のメールから大量のメールまで対応可能。
  2. 信頼性:AWSのインフラストラクチャを利用しているため、高い信頼性を誇る。
  3. 柔軟性:シンプルなSMTPインターフェイスAPIを通じて、既存のアプリケーションやシステムと容易に統合できる。
  4. コスト効率:従来のメール送信方法に比べ、SESはコスト効率に優れている。送信したメールの数に応じて課金されるため、無駄なコストがかからない。
  5. セキュリティ:SESはSPFDKIMを使用してドメインを認証し、送信者の評価を保護する。また、送信元の評価を監視し、スパムや不正なメールの送信を防ぐ機能も備えている。
  6. 分析とモニタリング:送信したメールの配信状況や開封率などのメトリクスをリアルタイムで確認可能。これにより、メールキャンペーンの効果を測定し、改善策を講じることができる。

Bulk send Emailについて

リクエスト構文

  • SendBulkEmail APIのリクエストは、HTTP POSTメソッドを使用し、JSON形式のデータを含むことが必要。
  • リクエスト本文には、「BulkEmailEntries」(一括メールエントリのリスト)、オプションで「ConfigurationSetName」(使用する設定セットの名前)、そして「DefaultContent」(メッセージの本文)などを指定。

リクエスト本文の要素

  • BulkEmailEntries: 一括メールエントリオブジェクトの配列。各エントリは個別の宛先(Bcc、Cc、Toアドレス)と個別のメール内容を指定できる。
  • DefaultContent: メッセージの本体を指定するオブジェクト。テンプレートメッセージを指定可能。
  • FeedbackForwardingEmailAddress: バウンスや苦情通知を送信するアドレス。
  • FromEmailAddress: メールの「From」アドレス。

レスポンス構文

  • 成功すると、サービスはHTTP 200レスポンスを送り返す。
  • レスポンスには「BulkEmailEntryResults」が含まれ、これは宛先ごとのレスポンスオブジェクトの配列。失敗したメッセージは再試行が必要。

エラー

  • 一般的なエラータイプには、「AccountSuspendedException」(アカウントのメール送信機能が制限された)、「BadRequestException」(無効な入力)、「LimitExceededException」(リソースタイプのインスタンスが多すぎる)などがある。

注意点

Amazon SESでのメールテンプレートの使用

Amazon SESでメールを一括送信する際には、SendBulkTemplatedEmail APIを利用する必要がある。このAPIは、SES上に作成されたテンプレートを使ってメール送信を行うため、テンプレートの事前作成が必須。

メールテンプレートの作成と利用

メールテンプレートは、CreateTemplate APIを用いて作成。作成したテンプレートには、件名(SubjectPart)と本文(TextPartおよびHtmlPart)の変数を含めることができ、これらの変数はSendBulkTemplatedEmail APIを実行する際に指定して置き換える。

一括送信するメールの内容が頻繁に変わる場合は、以下の2つの方法がある:

  1. テンプレートを都度作成・削除する
  2. 予め作成されたテンプレートを更新する

送信時の制限

SendBulkTemplatedEmail APIを利用する際、以下の制限がある:

  • 1回のAPI実行で最大50通のメッセージを送信できる
  • To、CC、BCCフィールドを含む1通のメッセージ内で指定可能な受信者数は最大50

また、下記も制限がありリージョンごとに上限は異なる

  • 24時間あたりの最大送信数:これは、アカウントが1日に送信できるメールの最大数を指します。新規アカウントやサンドボックス環境にあるアカウントの場合、この数は通常低く設定されているが、時間とともに、またはAWSサポートへのリクエストによって増加することがある。
  • 1秒あたりの最大送信レート:これは、アカウントが1秒間に送信できるメールの最大数。このレートもアカウントの状況に応じて変わることがある。
  • メッセージサイズの制限:送信できるメールの最大サイズも制限されており、これにはメール本文と添付ファイルのサイズが含まれている。

これらの制限を超える場合は、メッセージを分割するか、APIを複数回に分けて実行する必要がある。

golangにおける使用法

インストール

go get -u github.com/aws/aws-sdk-go-v2

インポート

import "github.com/aws/aws-sdk-go-v2/service/ses"

エラー処理 このAPI操作は、サービスAPIおよびSDKのエラーに対してawserr.Errorを返す。エラーの詳細情報を取得するためには、awserr.ErrorのCodeとMessageメソッドに対するランタイムタイプアサーションを使用する。

戻り値としてのエラータイプ TooManyRequestsException: 操作に対して多くのリクエストが行われた。 LimitExceededException: 指定されたリソースタイプのインスタンスが多すぎる。 AccountSuspendedException: アカウントのメール送信能力が永続的に制限されたため、メッセージを送信できない。 その他のエラータイプも存在する。

リクエストの生成と送信 SendBulkEmailRequestメソッドは、SendBulkEmail操作のためのaws/request.Requestオブジェクトを生成する。このリクエストが成功裏に完了すると、レスポンスがoutputに入れられる。 リクエストが成功すると、エラーがない限りSendメソッドがAPIコールをサービスに送信し、outputが有効になる。

コンテキストの使用 SendBulkEmailWithContextは、コンテキストと追加のリクエストオプションを渡す能力を含むSendBulkEmailと同じだ。このメソッドは、リクエストキャンセル用に非nilのコンテキストを使用する。

参考:

Amazon SES(高可用性で低価格なEメール送信サービス)| AWS

SendBulkEmail - Amazon Simple Email Service

Amazon SESでメールを一括送信したい時の留意点 | DevelopersIO