Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Amazon SESのメール送信結果判定に苦戦した話
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Hayato Sato
October 09, 2026
Technology
27
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Amazon SESのメール送信結果判定に苦戦した話
Hayato Sato
October 09, 2026
Other Decks in Technology
See All in Technology
Claude の新機能を、 出た日に触って社内に届けるまで
rfdnxbro
1
170
オントロジーって 結局なにもの? AI エージェントに「意味」を渡す知識設計の話
greenmidori
0
190
日本語に強いオープンな大規模言語モデル「LLM-jp」
odashi
4
1.1k
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
190
Getting Started with Google Antigravity
glaforge
0
300
Benchmarking Disaggregated Serving on vLLM + Dynamo with a Real Coding-Agent Workload
nttcom
1
190
20261017福岡devIO 「AIは"良いダッシュボード"を作れるか?
jtakeda
0
140
今さら理解するウェブフォントver.2026
takanorip
3
770
ストレスなくAIと付き合いたい!こんなときどうしてる?
namiki64
3
490
AI時代のPRレビューにどう向き合うか?
kairim0
1
240
AIにシークレットを見せない、WSL2で安全な開発環境
yazm
0
300
無理せず続ける、子育てエンジニアの学び
codmoninc
PRO
0
860
Featured
See All Featured
So, you think you're a good person
axbom
PRO
2
2.2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
A Modern Web Designer's Workflow
chriscoyier
699
190k
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
Rails Girls Zürich Keynote
gr2m
96
14k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
67k
Claude Code のすすめ
schroneko
67
230k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
560
Balancing Empowerment & Direction
lara
6
1.3k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
640
Transcript
Amazon SESのメール送信結果判定に 苦戦した話 2026.10.09 Fukuoka.sre#1 株式会社ギフティ 佐藤 颯 (Hayato Sato)
⾃⼰紹介 株式会社ギフティ 佐藤 颯 (Hayato Sato) • 新卒⼊社して5年⽬ • バックエンド(Rails)をメインにしつつ、インフラ(AWS)も担当
Amazon SES とは • 正式名称は、 Amazon Simple Email Service •
AWS が提供するクラウドベースのメール送信サービス • API 経由で簡単にメール送信の実装が可能
実現したかったこと 1. メール送信 2. メール送信結果の把握 スケーラブルなメール送信 システムの構築 送信成功判定をトリガーとして 次のアクションを実⾏
実現したかったこと 1. メール送信 2. メール送信結果の把握 スケーラブルなメール送信 システムの構築 送信成功判定をトリガーとして 次のアクションを実⾏
どうやって実現するのか Amazon SESの「イベント発⾏(event publishing)」を活⽤ • Amazon SES は Amazon Simple
Notification Service (Amazon SNS) などの サービスに対して、イベントを発⾏することが可能 • そのイベントデータから、メールの送信状況(送信、到達、バウンス、苦情 など)の変化を取得可能
イベント伝達のためのインフラ構成 イベント発⾏ Amazon SES キューに送信 Amazon SNS メッセージ取得 Amazon SQS
アプリケーション (ECS on Fargate)
送信結果判定に役⽴つイベント 発⾏される様々なイベントのうち、以下の2つを使って送信結果判定ができそう Delivery Bounce 受信側メールサーバーへの送信に 成功したときに発⾏されるイベント 送信に失敗したときに発⾏されるイベント ハードバウンス 宛先アドレスが存在しないなどの恒久的なエラー ソフトバウンス
受信ボックスの容量オーバーなどの⼀時的なエラー
シンプルに判定できそう 最初にアプリケーションに通知されたイベントを基に送信結果を判定 Delivery イベントを受信 → 「送信成功 」と判定 Bounce イベントを受信 →
「送信失敗」と判定
これで完成?!
そんなに⽢くはなかった
判定結果が正しくなさそう... 運⽤開始後、以下のような問い合わせが発⽣ 「送信成功」と判定したが、実際には「メールが届いていない」 システム内では送信成功として記録されているが、実際には届いていない。 「送信失敗」と判定したが、実際には「メールを受信できている」 システム上は送信失敗として処理されているが、ユーザー側では問題なく受信されている。 →AWS サポートへの問い合わせや送られてくるイベントの確認などにより詳細調査
調査結果1 Delivery の後に Bounce が発⾏されるケースがある 1 受信側のメールサーバーがメールを受信 Delivery 2 受信後の処理で失敗
Bounce
調査結果2 「Delivery -> Bounce」という同じ順序でも、バウンスの種別によって送信結果が異なる Delivery の後に Bounce(ハードバウンス)を発⾏ → 「送信失敗 」と判定すべき
(受信拒否設定などが原因) Delivery の後に Bounce(ソフトバウンス)を発⾏ → 「送信成功」と判定すべき(⾃動応答設定などが原因)
調査結果からわかったこと • 最初に通知されるイベントだけでは正確に判定できない • 最後に通知されるイベントだけでは正確に判定できない 単⼀のイベントだけではなく 対象メール送信リクエストに関する「イベント列全体」をみて 総合的に判定する必要がある
最終的な判定ロジック 1. メール送信リクエスト後、 1分以上待つ 2. 受信したイベント列を 発⾏時刻順 に並べる 3. ソートされたイベント列から送信結果を判定する
Delivery → Bounce(ソフトバウンス) の場合 → 送信成功 上記以外の場合 → 最後のイベントで判定 • Delivery → 送信成功 • Bounce→ 送信失敗 より詳細に解説した 技術ブログはこちら!