[アップデート] Amazon SES の Open/Click イベント通知にボット判定フィールド isBotEvent が追加されたので確認してみた

[アップデート] Amazon SES の Open/Click イベント通知にボット判定フィールド isBotEvent が追加されたので確認してみた

Amazon SESのOpen/Clickイベント通知に新たに追加された`isBotEvent`フィールドについて、実際の動作を確認しながら紹介します。メールセキュリティスキャナーなど自動システムによるイベントを人間の操作と区別できるようになり、エンゲージメント計測の精度向上が期待できます。
2026.08.11

いわさです。

Amazon SES では Configuration Set のイベント送信先を設定することで、メールの Open(開封)や Click(リンククリック)イベントを SNS、Firehose、EventBridge に送信してエンゲージメントを計測できます。

https://docs.aws.amazon.com/ses/latest/dg/monitor-using-event-publishing.html

ただ、Open/Click イベントにはメールセキュリティスキャナーなど、受信者本人ではなく自動化されたシステムによって発生するものが含まれることがあります。
アナウンスによると、実際に人間がメールを読んでいるのか、セキュリティゲートウェイが自動スキャンしているだけなのかの区別がつかず、エンゲージメント指標の信頼性に課題があったとのこと。なるほど。

先日のアップデートで、Open および Click のイベント通知に isBotEvent フィールドが追加されました。

https://aws.amazon.com/about-aws/whats-new/2026/08/amazon-ses-automated-email-interactions/

このフィールドは、そのイベントが自動化されたシステム(bot)によって発生した可能性が高いか、人間の操作によるものかを示します。
値は Likely(bot の可能性が高い)と Unlikely(人間の可能性が高い)の 2 値です。
既に Open/Click イベントをイベント送信先に発行している場合は、追加の設定なしで自動的にフィールドが含まれるようになるとのことです。

今回こちらを確認してみたので紹介します。

実際に確認してみる

Configuration Set に Open/Click のイベント送信先(今回は SNS)を設定し、テストメールを送信してイベントデータの中身を確認してみます。

https://docs.aws.amazon.com/ses/latest/dg/event-publishing-retrieving-sns-contents.html

今回は以下の構成で検証しました。
Configuration Set の Event Destination に SNS トピックを追加し、その SNS トピックに SQS キューをサブスクライブすることで、イベントの JSON ペイロードを直接確認できるようにしています。

AC7169B2-D05C-47D2-AE72-49971407CEDB_1_105_c.jpeg

テストメールを送信します。HTML 形式でリンクを含むメールを送ることで、Open と Click の両方のイベントを発生させられます。

aws sesv2 send-email \
  --from-email-address "test@mail1.tak1wa.com" \
  --destination '{"ToAddresses":["iwasa.takahito@example.com"]}' \
  --content '{"Simple":{"Subject":{"Data":"isBotEvent field test"},"Body":{"Html":{"Data":"<html><body><p>Click: <a href=\"https://aws.amazon.com/ses/\">Amazon SES</a></p></body></html>"}}}}' \
  --configuration-set-name hoge-config \
  --region ap-northeast-1

SES は送信する HTML メールに自動的にトラッキングピクセル(1x1 の透明画像)とリンクのリダイレクトURLを埋め込みます。
受信者がメールを開封するとトラッキングピクセルが読み込まれて Open イベントが発生し、リンクをクリックするとリダイレクトを経由して Click イベントが発生します。

実際に受信したメールのソースを見てみると、元の HTML に含まれていたリンクがトラッキング用のリダイレクトURLに書き換えられ、末尾にトラッキングピクセルの img タグが挿入されていることがわかります。

<html><body><h1>SES isBotEvent Test 3</h1>
<p>Testing isBotEvent field in Open and Click events.</p>
<p><a href="https://track2.mail1.tak1wa.com/CL0/https:%2F%2Faws.amazon.com%2Fses%2F/1/0106019fedfb7062-...-000000/OZW8nlsY...=258">Learn more about Amazon SES</a></p>
<p><a href="https://track2.mail1.tak1wa.com/CL0/https:%2F%2Fdev.classmethod.jp/1/0106019fedfb7062-...-000000/BhMOVp9a...=258">DevelopersIO</a></p>
<img alt="" src="https://track2.mail1.tak1wa.com/CI0/0106019fedfb7062-...-000000/Pg83Tgpw...=258" style="display: none; width: 1px; height: 1px;">
</body></html>

リンクの href がカスタムトラッキングドメイン(track2.mail1.tak1wa.com)経由のURLに置き換わっており、最後の img タグが Open トラッキングピクセルです。
受信側のメールクライアントがこの画像を読み込むと Open イベント、リンクをクリックするとリダイレクトを経由して Click イベントが記録されます。

メールを開封してリンクをクリックした後、SQS に届いたイベントデータを確認してみます。

Open イベント

Open イベントの open オブジェクトを確認すると、isBotEvent フィールドが追加されていることがわかります。

{
  "timestamp": "2026-08-10T23:29:49.254Z",
  "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
  "ipAddress": "104.28.xx.x",
  "isBotEvent": "Unlikely"
}

通常のブラウザ User-Agent でメールを開封したため、isBotEventUnlikely と判定されています。

Click イベント

Click イベントの click オブジェクトにも同様に isBotEvent フィールドが含まれています。

{
  "timestamp": "2026-08-10T23:29:55.170Z",
  "ipAddress": "104.28.xx.x",
  "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
  "link": "https://aws.amazon.com/ses/",
  "linkTags": null,
  "isBotEvent": "Unlikely"
}

Click イベントでは既存の link(クリックされたリンクURL)や linkTags に加えて isBotEvent が追加されています。

EventBridge 経由での確認

SNS だけでなく、EventBridge をイベント送信先に設定した場合も確認してみました。
EventBridge 経由で CloudWatch Logs に出力されたイベントでも同様に isBotEvent フィールドが確認できます。

{
  "detail-type": "Email Opened",
  "source": "aws.ses",
  "detail": {
    "eventType": "Open",
    "mail": {
      "messageId": "0106019fee022beb-...",
      "destination": ["bottest@mail-useast1.tak1wa.com"]
    },
    "open": {
      "timestamp": "2026-08-10T23:29:49.254Z",
      "userAgent": "Mozilla/5.0 ...",
      "ipAddress": "104.28.xx.x",
      "isBotEvent": "Unlikely"
    }
  }
}

749EBF7C-8415-4D0C-AE9B-CAFF5236A066_1_105_c.jpeg

bot 判定の条件について

今回の検証では、意図的に bot 風の User-Agent(Barracuda/5.4 や簡略化された Mozilla/5.0)でトラッキングURLにアクセスしてみましたが、いずれも isBotEvent: Unlikely と判定されてしまいました。うーむ...。

{
  "timestamp": "2026-08-10T23:31:28.980Z",
  "userAgent": "Barracuda/5.4",
  "ipAddress": "104.28.xx.x",
  "isBotEvent": "Unlikely"
}

公式ドキュメントには bot 判定のロジックの詳細は記載されていませんが、User-Agent の文字列だけではなく、アクセスのタイミングやパターンなど複合的な要因で判定しているようです。
実際の運用環境では、企業のメールセキュリティゲートウェイ(Microsoft Defender for Office 365 の Safe Links や Barracuda のリンクプロテクション等)がメール受信直後に全リンクを自動スキャンするケースがあり、そういったパターンでは Likely と判定されるものと推測されます。

公式ドキュメントによると、このフィールドは「イベントが自動化されたシステムによって生成された可能性」を示すシグナルとして提供されているとのこと。

The likelihood that the event was generated by an automated system (bot) rather than a human. Possible values: Likely, Unlikely.

https://docs.aws.amazon.com/ses/latest/dg/event-publishing-retrieving-sns-contents.html

さいごに

本日は Amazon SES の Open/Click イベント通知に isBotEvent フィールドが追加されたので確認してみました。

メール配信のエンゲージメント分析において、bot による開封やクリックを除外できると開封率・クリック率の精度が上がるので、マーケティングメールを送信しているケースでは活用できそうです。
例えば Firehose 経由で S3 に蓄積したイベントデータを Athena で分析する際に、isBotEvent = 'Unlikely' でフィルタすることで人間のエンゲージメントだけを集計する、といった使い方が考えられます。
追加の設定が不要で、既存のイベント送信先にそのまま含まれてくる点も手軽で良いですね。
今回の検証環境では Likely 判定を再現できなかったので、企業向けメールゲートウェイが関与する環境で改めて確認してみたいところです。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事