Amazon SES

##■特徴##

フルマネージド型／サーバレス型のコスト効率に優れたEメールサービスです。

|送信|受信|
|---|---|
|AWS SDK経由でプログラムからメール送信を行うことが可能<br>独自ドメインからメールを遅れる<br>バウンス(送信エラー)の対応が必要|独自ドメインを設定可能<br>受信メールをS3に保存したり、受信をトリガに後続の処理を実施可能|

**バウンス処理**
もし、メールが正しく送信されなかった場合や、苦情を受けてしまった場合、そのメールアドレスに対してメールを送らないように実装する必要がある。

##■新コンソール##

[[2021/02015]Amazon Simple Email Service が再設計されたサービスコンソールエクスペリエンスの提供を開始](https://aws.amazon.com/jp/about-aws/whats-new/2021/02/amazon-simple-email-service-launches-a-redesigned-service-console-experience/)

いくつかの機能追加も入りました。

- DKIMベースのドメイン検証：DKIM準拠の電子メールプロバイダーで配信可能性を強化し、DMARC（ドメインベースのメッセージ認証、レポート、および準拠）への準拠を実現するのに役立ちます。
- Amazon SESメールボックスシミュレーター：メール送信がどのように処理されるのかテストできるようになりました。
- デフォルトの構成セット:割り当てられた構成セットが、送信時にそのIDから送信されたメッセージに常に適用されることを保証します。これにより、電子メールヘッダーを変更することなく、専用のIPプールを関連付けたり、IDのイベント公開を設定したりすることができます。
- レピュテーションメトリック：バウンスと苦情率についてグラフ化してくれる。
 
##1.SESにドメインを登録し、Route53に紐付ける##

※Route53にドメインを登録済みであるものと過程する。

[Domains]-[Verify a New Domain]
[Domain]をに入力し、「Generate DKIM Settings」にチェック。
![スクリーンショット 2019-03-22 20.45.12.png](https://qiita-image-store.s3.amazonaws.com/0/280929/ea23c4a3-8460-ca6b-71bb-95cc8022f93b.png)


次の画面はそれぞれ、
[Use Route53]　
[Create Record Sets]
をクリック。

Route53を開くと、TXTとCNAMEレコードが作成されているはず。
![スクリーンショット 2019-03-22 20.49.38.png](https://qiita-image-store.s3.amazonaws.com/0/280929/fb064c18-7292-6410-9ef4-09ea74535055.png)


##2.メールアドレスの事前登録##

[Email Addresses]-[Verify a Email Address]
メールアドレスを入力し、[Verify This Email Address]
![スクリーンショット 2019-03-22 20.54.19.png](https://qiita-image-store.s3.amazonaws.com/0/280929/e394d40a-9a77-c19f-4e1a-ef0e850e9e1d.png)

登録したメールアドレスに届いたリンクをクリック。
![スクリーンショット 2019-03-22 20.55.58.png](https://qiita-image-store.s3.amazonaws.com/0/280929/a8182519-570a-387f-bc51-a1c5df3f67b8.png)

このように認証される。
![スクリーンショット 2019-03-22 20.56.19.png](https://qiita-image-store.s3.amazonaws.com/0/280929/0c914bd8-a0c1-4a10-6799-40987ba63d47.png)

**参考：利用緩和申請**
サポートに問い合わせることで、事前登録していないメールアドレスへの送信が可能になります。


##3.マネージメントコンソールからテスト送信する##

[Domains]の「Send a Test Email」をクリック。
必要な項目を入力し、「Send Test Email」
![スクリーンショット 2019-03-22 21.00.59.png](https://qiita-image-store.s3.amazonaws.com/0/280929/b9ace0bc-34fd-f2b6-c21c-bf1d86905d9a.png)

メールが届いているか確認してみましょう。


##4.SDK for PHP でメッセージを送信する##

```PhP:SendEmail.php 
vim SendEmail.php 
<?php
require '../vendor/autoload.php';

use Aws\Ses\SesClient;

// バージニア北部リージョン以外を利用している場合は、region を変更すること
$ses = SesClient::factory(array(
  'version'=> 'latest',
  'region' => 'us-east-1',
));

try {
  $result = $ses->sendEmail([
    // TODO: 送信元メールアドレスの入力
    'Source' => '***@***.***',
    'Destination' => [
      'ToAddresses' => [
        // TODO: 送信先メールアドレスの入力
        '***@***.***',
      ],
    ],
    'Message' => [
      'Subject' => [
        'Charset' => 'UTF-8',
        'Data' => 'Hello SES World!!',
      ],
      'Body' => [
        'Text' => [
          'Charset' => 'UTF-8',
          'Data' => 'AWS SDK for PHP を使った SES 送信テストです。',
        ],
      ],
    ],
  ]);

  $messageId = $result->get('MessageId');
  echo("Email sent! Message ID: $messageId"."\n");

} catch (SesException $error) {
  echo("The email was not sent. Error message: ".$error->getAwsErrorMessage()."\n");
}
```

メールを送信し、届いているか確認する。

```
php SendEmail.php 
Email sent! Message ID: 01000169a9d810aa-c6dc4afc-b2a6-46a0-b084-a678918f5a88-000000
```


##5.バウンスや苦情の処理方法の検討###
SESのバウンス・苦情メールをSNS経由で通知するように設定だけしてみましょう。
なお、具体的なSNSの使い方については省きます。

###5-1 SNSからトピックを作成する###
SNSからトピックを作成してください。

###5-2 SESとSNSを関連付けさせる###
SESで先程追加したEメールアドレスの詳細画面から「Notification」の項目を開き、「Edit Configuration」ボタンをクリック。
先程作成したSNSトピックを指定してあげる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/aecdcc39-4f92-909c-c080-1017810b22fc.png)

###5-3  SNSからサブスクリプションを作成する###
SNSからサブスクリプションを作成してください。

###5-4　Bounceメールを送ってみる###
BounceやComplaintsになるメールアドレスはAWSがテスト用として提供しているのでこれを利用する。
[Amazon SES での E メール送信のテスト](https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/mailbox-simulator.html)
Bounceメールを送信し、SES→SNS→メール経由でBounceメールが送られてきたか確認してみましょう。


##6.SMTPの利用###
生成済み Email メッセージを受け取って送信する SES の SMTP エンドポイントで送信する。 
SMTP を前提としてプログラムから直接利用する場合などに利用します。

[IAM User Name:]は任意の名前で構いません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/1d267462-7dc6-11a0-3f30-4b3a8321a416.png)

[ユーザーの SMTP セキュリティ認証情報を表示]の
　SMTP ユーザー名:
　SMTP パスワード:
をメモしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/01f0e446-6d40-0acc-1676-7b6852d4fd1b.png)

任意のメールソフトでSMTPサーバを設定し、ヘッダー情報などを確認してみましょう。