Amazon SESのバウンスを管理者に通知する方法3選

Amazon SESのバウンスを管理者に通知する方法3選

2025.08.07

はじめに

Amazon SESでメールを送信していると、宛先不明や受信拒否などでメールがバウンス(配信失敗)することがあります。
これらのバウンス情報を適切に管理者に通知することで、送信品質の維持や問題の早期発見が可能になります。

AWSドキュメントでは、Amazon SESのバウンス通知方法として以下の3つが紹介されています。

Amazon SES を使用して E メールを送信するには、次のいずれかの方法を使用して、バウンスや苦情の通知を送信するように設定する必要があります。

  • E メールのフィードバック転送を有効にする。このタイプの通知を設定する手順は、このセクションに含まれています。
  • Amazon SNS トピックに通知を送信する。詳細については、「Amazon SNSを使用したAmazon SES通知の受信」を参照してください。
  • イベント通知を発行する。詳細については、「Amazon SES イベント発行を使用して E メール送信をモニタリングする」を参照してください。
    https://docs.aws.amazon.com/ja_jp/ses/latest/dg/monitor-sending-activity-using-notifications-email.html
  1. メールのフィードバック転送を有効にする
  2. Amazon SNS トピックに通知を送信する
  3. イベント通知を発行する。

本記事では、それぞれの特徴やメリット・デメリット、実際の通知内容などを解説します。

1. メールのフィードバック転送を有効にする

メールフィードバック転送は、最もシンプルで導入しやすいバウンス通知方法です。
Amazon SESではデフォルトで有効になっており、バウンスや苦情が発生すると、指定されたメールアドレスに通知メールが送信されます。

https://docs.aws.amazon.com/ja_jp/ses/latest/dg/monitor-sending-activity-using-notifications-email.html

特徴

  • 設定の簡単さ: 追加のAWSリソース作成が不要
  • 通知形式: 通常のメール形式で受信
  • 対象: バウンス、苦情の両方に対応
  • 制限: 通知メールの内容は変更不可

設定方法は、フィードバック転送を有効化するだけです。

cm-hirai-screenshot 2025-06-26 10.13.25

通知先の決定ルール

前提条件

バウンス通知先として指定できるのは検証済みアドレスのみです。例えば、ドメイン(example.com)を検証している場合、以下のようになります。

  • @example.com で終わるメールアドレスは使用可能
    • 例:admin@example.comsupport@example.combounce@example.comなど
  • 他ドメインのアドレス(admin@example.orgなど)は指定不可

送信方法別の通知先決定ルール

1. SendEmail API使用時

条件 通知先
ReturnPathパラメータ指定あり ReturnPathのアドレス
ReturnPathパラメータ指定なし Sourceパラメータのアドレス
# ReturnPath指定ありの場合
client.send_email(
    Source='sender@example.com',        # 送信者
    ReturnPath='bounce@example.com',    # ← バウンス通知先
    Destination={'ToAddresses': ['recipient@example.org']},
    Message={...}
)
# → バウンス通知は bounce@example.com に送信

# ReturnPath指定なしの場合
client.send_email(
    Source='sender@example.com',        # ← バウンス通知先兼送信者
    Destination={'ToAddresses': ['recipient@example.org']},
    Message={...}
)
# → バウンス通知は sender@example.com に送信

2. SMTP使用時

条件 通知先
Return-Pathヘッダー指定あり Return-Pathのアドレス
Return-Pathヘッダー指定なし MAIL FROMコマンドのアドレス

バウンス通知を別ドメインのアドレスに送信したい場合は、他の通知方法を検討してください。

通知内容例

通知内容はシンプルで、英語で記載されます。

Delivery_Status_Notification__Failure_
引用元画像:https://dev.classmethod.jp/articles/amazon-ses-bounce-sns-notification/

メリット・デメリット

メリット

  • 設定が最も簡単
  • 追加コストなし

デメリット

  • プログラム的な処理が困難
  • 通知内容のカスタマイズ不可
  • 通知先は検証済みアドレスに限定

2. Amazon SNS トピックに通知を送信する

Amazon SNSを利用することで、JSON形式の構造化された通知を受信できます。

SNSの送信先としてAWS Lambda関数を指定することで、プログラム的な処理が可能になり、フィードバック転送よりも柔軟な運用が実現できます。

各フィードバックタイプ(バウンス、苦情、配信)ごとに1つのSNSトピックを設定でき、そのSNSトピック側で複数のサブスクライバーを設定することで、複数の通知先への同時配信が可能です。

https://docs.aws.amazon.com/ja_jp/ses/latest/dg/monitor-sending-activity-using-notifications-sns.html

特徴と設定要件

  • 通知形式: JSON形式(構造化データ)
  • 処理性: プログラム的な自動処理が可能
  • 配信先: メール、SMS、HTTP、SQSなど多様(SNSトピックのサブスクライバーとして設定)
  • 必要リソース: SNSトピック

設定には事前準備として、SNSトピックの作成と、SESからの発行を許可するアクセス権限の設定が必要です。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ses.amazonaws.com"
      },
      "Action": "sns:Publish",
      "Resource": "arn:aws:sns:region:account:topic_name"
    }
  ]
}

通知設定は、バウンス、苦情、配信の各フィードバックタイプにSNSトピックを指定するだけです。
必要に応じて「元のEメールヘッダーを含める」オプションも有効化できます。

cm-hirai-screenshot 2025-06-26 10.13.25

cm-hirai-screenshot 2025-06-26 10.48.58

通知内容例

実際の通知例は以下のようになります。

cm-hirai-screenshot 2025-06-26 10.40.20

実際の通知では、JSONが整形されておらず一行で送信されるため、可読性は低くなっています。

整形した場合
{
  "notificationType": "Bounce",
  "bounce": {
    "feedbackId": "0106019768343bf8-184d0c26-ef9b-428a-ae16-29c40016f16e-000000",
    "bounceType": "Permanent",
    "bounceSubType": "OnAccountSuppressionList",
    "bouncedRecipients": [
      {
        "emailAddress": "hoge@example.com",
        "action": "failed",
        "status": "5.1.1",
        "diagnosticCode": "Amazon SES did not send the message to this address because it is on the suppression list for your account. For more information about removing addresses from the suppression list, see the Amazon SES Developer Guide at https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-email-suppression-list.html"
      }
    ],
    "timestamp": "2025-06-13T07:32:23.000Z",
    "reportingMTA": "dns; amazonses.com"
  },
  "mail": {
    "timestamp": "2025-06-13T07:32:22.983Z",
    "source": "test@example.com",
    "sourceArn": "arn:aws:ses:ap-northeast-1:アカウントID:identity/example.com",
    "sourceIp": "xx.xx.xx.xx",
    "callerIdentity": "StepFunctions-ses-email-role-eor8ynebg",
    "sendingAccountId": "アカウントID",
    "messageId": "0106019768343b47-341af3f3-2f7b-4276-b25d-c2e389442275-000000",
    "destination": ["hoge@example.com"],
    "headersTruncated": false,
    "headers": [
      { "name": "From", "value": "test@example.com" },
      { "name": "Reply-To", "value": "reply@example.com" },
      { "name": "To", "value": "hoge@example.com" },
      {
        "name": "Subject",
        "value": "【重要】システムメンテナンス完了のお知らせ"
      },
      { "name": "MIME-Version", "value": "1.0" },
      { "name": "Content-Type", "value": "text/plain; charset=UTF-8" },
      { "name": "Content-Transfer-Encoding", "value": "base64" }
    ],
    "commonHeaders": {
      "from": ["test@example.com"],
      "replyTo": ["reply@example.com"],
      "to": ["hoge@example.com"],
      "subject": "【重要】システムメンテナンス完了のお知らせ"
    }
  }
}

メリット・デメリット

メリット

  • 構造化データ(JSON)で処理しやすい
  • 複数の通知先に配信可能(SNSのサブスクリプションを複数設定)
  • 詳細な通知情報を取得可能

デメリット

  • 生のJSON通知は可読性が低い
  • 通知内容のカスタマイズは基本的に不可
    • ただし「SES→SNS→Lambda→カスタム通知」のようにLambdaを挟むことで、通知内容の整形やカスタマイズが可能
    • SNSで設定可能な送信先は限定的(例:AWS Step Functionsは送信先に設定不可)

3. イベント通知を発行する

最も柔軟で高機能な通知方法です。設定セットを使用してメール送信イベントを様々なAWSサービスに配信し、詳細な分析や監視が可能になります。

バウンスだけでなく、オープンやクリックなどのエンゲージメント情報も取得できます。

https://docs.aws.amazon.com/ja_jp/ses/latest/dg/monitor-sending-activity-using-notifications.html

  • 送信先: CloudWatch、Data Firehose、EventBridge、SNS
  • カスタマイズ性: 通知内容の修正・拡張が可能
  • イベント種類: 送信、配信、オープン、クリック、バウンス、苦情、拒否、レンダリング失敗、配信遅延など
  • 必須要件: 設定セットの作成とメール送信時の指定

他の通知方法と異なり、メール送信時に必ず設定セットを指定する必要があります
この設定セットで、どのイベントをどのサービスに送信するかを定義します。

設定手順

以下の3ステップで設定できます。

  1. 設定セット作成
  2. イベント送信先追加
    • 送信先サービス(CloudWatch、SNS等)と対象イベントタイプを設定
  3. メール送信時に設定セットを指定
    • API使用時: ConfigurationSetパラメータで設定セット名を指定
    • SMTP使用時: X-SES-CONFIGURATION-SETヘッダーで設定セット名を指定
SendEmail API使用例
ses_client.send_email(
    Source='sender@example.com',
    Destination={
        'ToAddresses': ['recipient@example.org']
    },
    Message={
        'Subject': {'Data': 'Test Email'},
        'Body': {'Text': {'Data': 'This is a test email'}}
    },
    ConfigurationSetName='my-configuration-set'  # 設定セットを指定
)

設定セットのイベント送信先をEventBridgeにし、EventBridgeからSNSでメール通知する場合、以下の記事をご参照ください。

https://dev.classmethod.jp/articles/ses-publishes-email-sending-events-eventbridge/

この構成でEventBridgeトランスフォーマーを利用すると可読性を向上させることができますが、diagnosticCode(エラー詳細)を利用する場合にエラーが発生します。
エラー詳細は以下の記事をご参照ください。

https://dev.classmethod.jp/articles/amazon-ses-eventbridge-bounce-diagnosticcode-error/

そのため、EventBridgeからSNSではなく、LambdaやStep Functionsを挟む構成をおすすめします。
送信先をEventBridgeにし、Step Functions経由でSNSでメール通知する方法は、以下の記事をご参照ください。

https://dev.classmethod.jp/articles/aws-ses-bounce-notification-eventbridge-step-functions/

通知内容例

CloudWatchの場合はメトリクスとして蓄積され、SNSの場合は前述のJSON形式で通知されます。
EventBridgeの場合は以下のようなイベント形式で配信されます。

{
  "version": "0",
  "id": "12345678-1234-1234-1234-123456789012",
  "detail-type": "Email Bounced",
  "source": "aws.ses",
  "account": "123456789012",
  "time": "2025-01-01T12:00:00Z",
  "region": "us-east-1",
  "detail": {
    "eventType": "bounce",
    "mail": { ... },
    "bounce": { ... }
  }
}

https://docs.aws.amazon.com/ja_jp/ses/latest/dg/working-with-event-data.html

メリット・デメリット

メリット

  • 最も柔軟な通知が可能
  • 構造化データ(JSON)で処理しやすい
  • 送信先サービスごとに最適化された形式でデータ取得可能

デメリット

  • 設定が最も複雑
  • 複数のAWSサービスの理解が必要
  • メール送信時に設定セット指定が必要

まとめ

簡単導入なら「1. メールのフィードバック転送を有効にする」がおすすめです。
追加コストなしで即座に運用開始できます。

「3. イベント通知発行」では、EventBridge + Step Functionsのローコード実装で通知内容の整形が可能です。
EventBridge + Step Functionsを組み合わせることで、複雑なプログラム実装なしで柔軟な通知システムを構築でき、運用コストも抑えられます。

この記事をシェアする

facebookのロゴhatenaのロゴtwitterのロゴ

© Classmethod, Inc. All rights reserved.