お問い合わせ

メール通知はどう送っている?-SESによるメール配信-【Luxucomを支える技術 #18】

こんにちは、かびらです。

今回は、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について解説していきます。