こんにちは、かびらです。
今回は、SESについて解説します。
SESとは?

SESは、AWSが提供するメール送信専用のサービスです。
アプリから送るメールを、安全かつ安定して配信することができます。
ただし、SESを使っても、すべてのメールが必ず相手に届くわけではありません。
メール配信の中では、いくつかの状態が発生します。
バウンス・苦情とは?

メール配信の中で発生する代表的な状態が、バウンスと苦情です。
バウンスは、宛先が存在しない、あるいは受信を拒否されたことによって、メールが届かなかった状態を指します。
一方で苦情は、受信者がそのメールを迷惑メールとして、報告した場合の状態です。
これらのバウンスや苦情は、発生したまま放置するのではなく、適切に対応していく必要があります。
なぜバウンス・苦情への対応が必要なのか?

それでは、なぜバウンス・苦情への対応が必要なのでしょうか?
バウンスや苦情が増えてくると、送信者の信頼性が、少しずつ下がっていきます。
その結果、メール自体が届きにくくなり、迷惑メールとして扱われることも増えてきます。
そうなると、本来届けたいはずの、重要な通知まで届かなくなってしまいます。
そのため、バウンスや苦情は、発生したあとに把握し、適切に対応していくことが重要になるのです。
SESを使えば、こうしたバウンスや苦情をイベントとして受け取り、Lambdaと連携して比較的シンプルに対応することができます。
SESを採用した理由

次に、LuxucomでSESを採用した理由についてです。
アプリ開発するにあたって、AWSでドメイン管理やメール配信を、一元管理したいと考えていました。
また、バウンスや苦情への対応を含めたメール配信の運用を、比較的シンプルに構築したかったため、SESを採用しました。
SESと関連するアーキテクチャ

次に、LuxucomでSESと関連するアーキテクチャを見ていきましょう。
Webアプリからメール送信依頼があると、SESを通してメールが配信されます。
その際、メールが届かなかった場合や、迷惑メールとして報告された場合には、SESにバウンスや苦情としてイベントが返ってきます。
これらのイベントをトリガーにLambdaが起動し、配信状態をDynamoDBに記録します。
次回以降のメール送信では、この情報をもとに送信可否を判断することで、メール配信を制御しています。
SESを使って良かった点

次に、LuxucomでSESを使って良かった点です。
まず、DjangoやAWSのライブラリであるboto3を使って、アプリからのメール配信を比較的容易に構築できました。
また、Lambdaと連携することで、バウンスや苦情への対応もスムーズに構築できた点が、大きなメリットでした。
SESを使って難しかった点

次に、LuxucomでSESを使って難しかった点です。
まず、メール配信ドメインの設定には、少し手間がかかりました。
また、Gmailのガイドラインに従った迷惑メール対策として、SPFやDKIM、DMARCといったメール認証の設定を行う必要があり、このあたりの対応が難しかった点です。
さいごに
今回は、Luxucomのインフラを支える仕組みの中から、SESについて解説しました。
アプリからのメール配信や、バウンス・苦情への対応を、AWS上でどのように実現しているかが分かったと思います。
次回は、こうしたイベント処理や非同期な処理を支える仕組みとして、Lambdaについて解説していきます。

