Amazon SESを整理してみた

# 背景・目的
AWSでメールを送信する必要があったので、特徴を整理してみました。

# まとめ
下記に特徴をまとめます。

|特徴|説明|
|:--|:--|
|Amazon Simple Email Service (SES）|独自の E メールアドレスとドメインを使用して E メールを送受信する<BR><BR>簡単で費用対効果の高い方法を提供する E メールプラットフォーム|
|メール送信後のパターン|・Successful delivery and the recipient does not object to the email<BR>・Hard bounce<BR>・Soft bounce<BR>・Complaint<BR>・Auto response|
|メール配信の問題|・Bounce<BR>・Complaint<BR>・Global suppression list|
|Bounce|受信者の受信者 (メールプロバイダーなど) がメッセージを受信者に配信できない場合、受信者はメッセージを Amazon SES に返送する|
|Complaint|電子メールは ISP によって受け入れられ、受信者に配信されるが、受信者は電子メールをスパムと見なし、電子メール クライアントで [スパムとしてマーク] などのボタンをクリックする|
|Global suppression list|Amazon SESグローバルサプレッションリストは、SES 共有 IP プール内のアドレスの評判を保護するために SES が所有および管理しており、最近 SES のお客様に対してハードバウンスを引き起こした受信者の E メールアドレスが含まれている|
|SESの機能|・検証<BR>・認証<BR>・送信クォータ<BR>・コンテンツフィルタリング|

# 概要
下記を基に整理します

https://docs.aws.amazon.com/ja_jp/ses/latest/dg/Welcome.html

> Amazon Simple Email Service (SES） は、独自の E メールアドレスとドメインを使用して E メールを送受信するための簡単で費用対効果の高い方法を提供する E メールプラットフォームです。

> 例えば、特価販売などのマーケティング E メールや、注文確認などの取引 E メール、ニュースレターなどのその他のタイプの通信文の送信に使用できます。Amazon を使用してメールSESを受信すると、E メールオートレスポンダー、E メール配信停止システム、受信 E メールからカスタマーサポートチケットを生成するアプリケーションなどのソフトウェアソリューションを開発できます。

- 独自の E メールアドレスとドメインを使用して E メールを送受信する
- 簡単で費用対効果の高い方法を提供する E メールプラットフォーム
- 例
    - 特価販売などのマーケティング E メールや、注文確認などの取引 E メール、ニュースレターなどのその他のタイプの通信文の送信に使用できる
    - E メールオートレスポンダー、E メール配信停止システム、受信 E メールからカスタマーサポートチケットを生成するアプリケーションなどのソフトウェアソリューションを開発できる

## How email sending works in Amazon SES

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/6ca158cf-cdef-f1c5-d6fa-93d0acee234e.png)

[Amazon での E メール送信の仕組み SES](https://docs.aws.amazon.com/ja_jp/ses/latest/dg/send-email-concepts-process.html)

1. E メール送信者として機能するクライアントアプリケーションは、1人以上の受信者にEメールを送信するようにSESにリクエストする
1. リクエストが有効な場合、 SESは E メールを受け入れる
1. SES は、インターネット経由で受信者の受信者にメッセージを送信する
    - メッセージが SESに渡されると通常はすぐに送信され、最初の配信試行は通常ミリ秒以内に行われる
1. 以降は、下記のパターンがある
    1. ISP はメッセージを受信者の受信トレイに正常に配信する
    1. 受信者の電子メール アドレスが存在しないため、ISP は SES にバウンス通知を送信する。その後、SES は通知を送信者に転送する
    1. 受信者はメッセージを受け取ったが、スパムであると判断し、ISP に苦情を申し立てる。SES とのフィードバック ループが設定されている ISP は、苦情を SES に送信し、SES はそれを送信者に転送する


### After a sender sends an email request to SES
送信者が SES に電子メールの送信を要求すると、呼び出しは成功する場合と失敗する場合がある。

#### Successful sending request
1. SES への要求が成功した場合、SES は送信者に成功応答を返す
    - このメッセージには、リクエストを一意に識別する文字列であるメッセージ ID が含まれる
    - メッセージ ID を使用すると、送信した電子メールを識別したり、送信中に発生した問題を追跡できる
1. SES は要求パラメータに基づいて電子メール メッセージを組み立て、疑わしいコンテンツやウイルスがないかメッセージをスキャンし、SMTPを使用してインターネット経由で送信する

#### Failed sending request
- 送信者の SES への電子メール送信要求が失敗した場合、SES は送信者にエラーを応答し、電子メールをドロップする
    - 例
        - 要求の形式が適切でない
        - 電子メール アドレスが送信者によって検証されていない可能性
- リクエストが失敗したかどうかを判断する方法は、SES の呼び出し方法によって異なる
    - クエリ (HTTPS) API (SendEmailまたはSendRawEmail) を介して SES を呼び出す場合
        - アクションはエラーを返す
    - 例外を使用するプログラミング言語用の AWS SDK を使用している場合
        - SES への呼び出し によりMessageRejectedExceptionがスローされる
    -  SMTP インターフェイスを使用している場合
        -  送信者は SMTP 応答コードを受信するが、エラーの伝達方法は送信者のクライアントによって異なる

#### After Amazon SES sends an email
送信者の SES へのリクエストが成功すると、SES は電子メールを送信し、次のいずれかの結果になる

##### Successful delivery and the recipient does not object to the email
メールは ISP によって受け入れられ、ISP は受信者にメールを配信する

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/c0ea0e46-9190-4e25-16a4-5e19c80ebcfc.png" width=450 />

[Successful delivery and the recipient does not object to the email](https://docs.aws.amazon.com/ses/latest/dg/send-email-concepts-process.html#send-email-concepts-process-after-send)


##### Hard bounce
- 永続的な状態のため ISP によってメールが拒否されたか、またはメールアドレスが SES サプレッションリストにあるため SES によって拒否された
- メールアドレスが SES サプレッションリストにあるのは、最近 SES の顧客に対してハードバウンスを引き起こした場合
- ISP でのハードバウンスは、受信者のアドレスが無効であるために発生することがある
- ハードバウンス通知は ISP から SES に送信され、送信者の設定に応じて、メールまたは Amazon Simple Notification Service (Amazon SNS) を通じて送信者に通知される
- SES は、サプレッションリストのバウンスについても同じ方法で送信者に通知する

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/5bb5b76c-c3c7-11d8-cf61-808c8fe6b4c2.png" width=450 />

[Hard bounce](https://docs.aws.amazon.com/ses/latest/dg/send-email-concepts-process.html#send-email-concepts-process-after-send)


##### Soft bounce
- ISP がビジー状態でリクエストを処理できない、受信者のメールボックスがいっぱいであるなどの一時的な状況により、ISP は受信者にメールを配信できない
- ドメインが存在しない場合にも、ソフトバウンスが発生することがある
- ISP は SES にソフトバウンス通知を送り返すか、ドメインが存在しない場合は、SES がそのドメインのメールサーバーを見つけられない
- いずれの場合も、SES は一定期間メールを再試行する。その期間内に SES がメールを配信できない場合は、メールまたは Amazon SNS を通じてバウンス通知が送信する
- 再試行中に SES が受信者にメールを配信できた場合、配信は成功する

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/10bf4612-f063-8052-41a1-34e7685f476b.png" width=450 />

[Soft bounce](https://docs.aws.amazon.com/ses/latest/dg/send-email-concepts-process.html#send-email-concepts-process-after-send)


##### Complaint
- 電子メールは ISP によって受け入れられ、受信者に配信されるが、受信者は電子メールをスパムと見なし、電子メール クライアントで [スパムとしてマーク] などのボタンをクリックする
- SES が ISP とのフィードバック ループを設定している場合、苦情通知が SES に送信され、苦情通知は送信者に転送される
- ほとんどの ISP は苦情を送信した受信者の電子メール アドレスを提供しないため、SES からの苦情通知は、元のメッセージの受信者と SES が苦情を受信した ISP に基づいて、苦情を送信した可能性のある受信者のリストを送信者に提供する

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/557987d5-a03d-ca8b-cc28-28ac3a821fed.png" width=450 />

[Complaint](https://docs.aws.amazon.com/ses/latest/dg/send-email-concepts-process.html#send-email-concepts-process-after-send)


##### Auto response
電子メールは ISP によって受け入れられ、ISP はそれを受信者に配信する。
次に、ISP は不在通知 (OOTO) メッセージなどの自動応答を SES に送信する。SES は自動応答通知を送信者に転送する
**SES 対応プログラムが自動応答を生成するメッセージの送信を再試行しないようにする。**

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/40f63835-7a9b-5096-2c4e-90659ad30b39.png" width=450 />


[Auto response](https://docs.aws.amazon.com/ses/latest/dg/send-email-concepts-process.html#send-email-concepts-process-after-send)

### Understanding email deliverability in Amazon SES
> 受信者がメールを読んで、価値があると感じ、スパムとして分類されないようにする必要があります。言い換えると、メールの 配信率、つまり受信者の受信トレイに届くメールの割合を最大化する必要があります。このトピックでは、Amazon SES を使用する際に知っておくべきメールの配信率の概念について説明します。

> メールの配信可能性を最大限に高めるには、メール配信の問題を理解し、問題を防止するための対策を積極的に講じ、送信するメールのステータスを把握し、必要に応じてメール送信プログラムを改善して、配信成功の可能性をさらに高める必要があります。次のセクションでは、これらの手順の背後にある概念と、Amazon SES がプロセスでどのように役立つかについて説明します。

- メールの配信可能性を最大限に高めるには下記が必要。これにより配信成功の可能性をさらに高める
    - メール配信の問題を理解する
    - 問題を防止するための対策を積極的に講じる
    - 送信するメールのステータスを把握する
    - 必要に応じてメール送信プログラムを改善する

#### Understand email delivery issues
> ほとんどの場合、メッセージは対象の受取人に正常に配信されます。ただし、配信が失敗する場合や、送信されたメールの受け取りを受取人が拒否する場合があります。以下のセクションで説明するバウンス、苦情、およびサプレッションリストは、これらの配信問題に関連しています。

- 配信が失敗する場合や、送信されたメールの受け取りを受取人が拒否する場合がある

##### Bounce
- 受信者の受信者 (メールプロバイダーなど) がメッセージを受信者に配信できない場合、受信者はメッセージを Amazon SES に返送する
- その後、Amazon SES は、システムの設定方法に応じて、メールまたは Amazon Simple Notification Service (Amazon SNS) を通じて、返送されたメールを通知する
- ハード バウンスとソフト バウンスがある
    - ハード バウンス
        - 永続的な E メール配信の失敗
        - メールボックスが存在しないなど
        - SES は、DNS ルックアップの失敗を除き、ハードバウンスを再試行しない
        - **ハードバウンスした E メールアドレスに対しては、配信を繰り返し試行しないことを強く推奨**
    - ソフト バウンス
        - 一時的なメール配信の失敗
        - メールボックスがいっぱい、接続数が多すぎる（スロットリング）、接続がタイムアウトした場合など
        - Amazon SES はソフトバウンスを複数回再試行する。それでもメールを配信できない場合、Amazon SES は再試行を停止する
- SES は、再試行されなくなるハードバウンスとソフトバウンスを通知する
- SES コンソールまたは GetSendStatisticsAPI を使用して取得するバウンス率とバウンスメトリクスには、ハードバウンスのみがカウントされる

##### Complaint
- ほとんどの E メールクライアントプログラムには、「スパムとしてマーク」などのラベルが付いたボタンがあり、このボタンをクリックするとメッセージがスパムフォルダに移動さ​​れ、E メールプロバイダーに転送される
- ほとんどの E メールプロバイダーは、迷惑メールのアドレス (abuse@example.net など) を管理しており、ユーザーはこのアドレスに不要な E メールメッセージを転送して、E メールプロバイダーに防止措置を講じるよう要求できる
- どちらの場合も、受信者が苦情を申し立てています。E メールプロバイダーがあなたをスパマーと判定し、Amazon SES に E メールプロバイダーとのフィードバックループが設定されている場合、E メールプロバイダーは苦情を Amazon SES に返送する
- SES は、このような苦情を受け取ると、システムの設定方法に応じて、E メールまたは Amazon SNS 通知を使用して苦情を転送する

##### Global suppression list

- Amazon SESグローバルサプレッションリストは、SES 共有 IP プール内のアドレスの評判を保護するために SES が所有および管理しており、最近 SES のお客様に対してハードバウンスを引き起こした受信者の E メールアドレスが含まれている
- サプレッションリストにあるアドレスに SES 経由で E メールを送信しようとすると、SES への呼び出しは成功しますが、SES は E メールの送信を試行するのではなく、ハードバウンスとして扱う
- ハードバウンスと同様に、サプレッションリストのバウンスは送信クォータとバウンス率にカウントされる
- E メールアドレスは、サプレッションリストに最大 14 日間残ることができる
- 送信先の E メールアドレスが有効であることが確実な場合は、そのアドレスがアカウントレベルのサプレッションリストにリストされていないことを確認してグローバルサプレッションリストを上書きできる
- SES は引き続き配信を試行するが、バウンスした場合、そのバウンスは自分の評判に影響しますが、自分のアカウントレベルのサプレッションリストを使用していない場合はその E メールアドレスに送信できないため、他の人はバウンスを受け取らない

#### Be proactive
- インターネット上の E メールに関する最大の問題の 1 つは、迷惑メール (スパム) 
- E メールプロバイダーは、顧客がスパムを受信しないようにさまざまな対策を講じている
- SES では、E メールプロバイダーがお客様の E メールをスパムと見なす可能性を減らすための対策も講じている
- SES では、下記を使用している
    - 検証
    - 認証
    - 送信クォータ
    - コンテンツフィルタリング
- SES は E メールプロバイダーの信頼された評判を維持し、利用者に高品質の E メールを送信するよう求めている

##### Verification
- スパム送信者がメールのヘッダーを偽装し、送信元のメールアドレスを偽装して、メールが別のソースから送信されたかのように見せかけることは可能
- メールプロバイダーと Amazon SES 間の信頼を維持するために、Amazon SES では送信者が本人であることを確認する必要がある
- Amazon SES 経由でメールを送信するすべてのメールアドレスを検証し、送信者の ID を保護する必要がある
- メールアドレスは、Amazon SES コンソールまたは Amazon SES API を使用して検証できる
- ドメイン全体を検証もできる

##### Authentication
- 認証は、E メールプロバイダーに自分が本人であることを示すもう 1 つの方法
- E メールを認証すると、自分がアカウントの所有者であること、および E メールが転送中に変更されていないことの証拠を提供する
- 場合により、E メールプロバイダーが認証されていない E メールの転送を拒否する
- SESは、Sender Policy Framework (SPF) と DomainKeys Identified Mail (DKIM) の 2 つの認証方法をサポートしている

##### Sending quotas
- メールプロバイダーがメールの量やレートの突然の予期しない急増を検出すると、メールプロバイダーは利用者がスパマーであると疑い、メールをブロックする可能性がある
- すべての Amazon SES アカウントには送信クォータのセットがある
- これらのクォータは、24 時間に送信できるメールの数と、1 秒あたりに送信できるメールの数を制限する
- ほとんどの場合、新規ユーザーの場合、Amazon SES では毎日少量のメールを送信できる。送信するメールがメールプロバイダーに受け入れられる場合、このクォータは自動的に増加する。送信クォータは時間の経過とともに着実に増加するため、より高速で大量のメールを送信できる

##### Content filtering
- 多くの E メールプロバイダーは、コンテンツフィルタリングを使用して、受信メールがスパムかどうかを判断する
- コンテンツフィルターは疑わしいコンテンツを探し、メールがスパムのプロファイルに一致する場合はメールをブロックする
- Amazon SES でもコンテンツフィルターが使用される
- アプリケーションが Amazon SES にリクエストを送信すると、Amazon SES はユーザーに代わって E メールメッセージを組み立て、メッセージのヘッダーと本文をスキャンして、E メールプロバイダーがスパムと見なす可能性のあるコンテンツが含まれているかどうかを判断する
- mazon SES が使用するコンテンツフィルターでメッセージがスパムと判断された場合、Amazon SES での評判は悪くなる
- Amazon SES はすべてのメッセージに対してウイルススキャンも実行する
- メッセージにウイルスが含まれている場合、Amazon SES は受信者のメールサーバーにメッセージを配信しない

##### Reputation
- E メールの送信に関しては、レピュテーション(IP アドレス、E メールアドレス、または送信ドメインがスパムの送信元ではないという信頼の尺度) が重要
- Amazon SES は E メールプロバイダーとの間で高いレピュテーションを維持しているため、プロバイダーは E メールを受信者の受信トレイに配信する。同様に、Amazon SES で信頼できるレピュテーションを維持する必要がある
- Amazon SES でレピュテーションを築くには、高品質のコンテンツを送信する。高品質のコンテンツを送信すると、時間の経過とともにレピュテーションの信頼性が高まり、Amazon SES は送信クォータを増やす
- バウンスや苦情が多すぎると、レピュテーションに悪影響が及び、Amazon SES がアカウントの送信クォータを削減したり、Amazon SES アカウントを終了する
- 評判を維持する方法の 1 つは、**システムをテストするときに、自分で作成した電子メール アドレスに送信するのではなく、メールボックス シミュレーターを使用すること**
- メールボックス シミュレーターへの電子メールは、バウンスと苦情の指標にはカウントされない

##### High-quality email
- 高品質のメールとは、受信者が価値を感じ、受け取りたいと思うメール
- 価値は受信者によって意味が異なる

##### Stay informed
- 配信が失敗した場合、受信者がメールについて苦情を申し立てた場合、または Amazon SES が受信者のメールサーバーにメールを正常に配信した場合、Amazon SES は通知を提供し、使用状況の統計を簡単に監視できるようにすることで、問題を追跡するのに役立つ

##### Notifications
- E メールがバウンスすると、E メールプロバイダーが Amazon SES に通知し、Amazon SES が利用者に通知する
- Amazon SES は、Amazon SES が再試行しなくなったハードバウンスとソフトバウンスをお客様に通知する
- 多くの E メールプロバイダーも苦情を転送しており、Amazon SES は主要な E メールプロバイダーとの苦情フィードバックループを設定しているため、利用者は設定する必要ない
- Amazon SES は、バウンス、苦情、および正常な配信について、2 つの方法で通知できる
    - Amazon SNS 経由で通知を受信するようにアカウントを設定する
    - E メールで通知を受信する

##### Usage statistics
- Amazon SES では使用状況の統計情報が提供されており、失敗した配信を確認して根本原因を特定し、解決することができる

#### Improve your email-sending program
- バウンスや苦情が大量に発生している場合は、メール送信戦略を見直す必要がある
- 過度のバウンス、苦情、低品質のメール送信の試みは不正行為にあたり、AWS アカウントが停止されるリスクがあることに注意する

#### At-least-once delivery
- Amazon SES は、冗長性と高可用性を確保するために、メッセージのコピーを複数のサーバーに保存する
- まれに、メッセージを受信または削除するときに、メッセージのコピーを保存しているサーバーの 1 つが利用できなくなることがある
- このような状況が発生すると、使用できないサーバー上のメッセージのコピーは削除されず、メッセージを受信したときにそのメッセージのコピーが再度取得される可能性ある
- アプリケーションをべき等になるように設計する

# 考察
今回、Amazon SESを整理してみました。次回は実際に利用してみます。

# 参考
https://docs.aws.amazon.com/ses/latest/dg/Welcome.html