2021-06-30

AWSやってみよう[01-アプリケーションから送信するメールを迷惑メールにならないように送信する環境をつくる Amazon SES]

投稿者: KuRo

この記事で紹介していること

Amazon SES

今回はちょっと戻りますが、メール送信環境の構築をしていきます。
これは、後続のユーザID環境構築の前段作業となります。

Amazon SES (Simple Email Service) は、主にメルマガ送信環境といったところです。

通常のメールアドレスから、大量の同報メールを定期的に送信するのは、迷惑メールにされしまうのがオチです。
受信サーバは、各社様々な条件で迷惑メールにしてしまいます。
これを回避する手段として、メール配信サービスが存在します。
巷ではblastmail配配メールというサービスがこれに該当します。

Amazon SES はメール配信サービスとして、以下のような役割を担います。

Amazon SES の役割
  • 特定のメールアドレスを送信元アドレスとして、大量の同報メールを迷惑メールにされずに適切に送達する
  • アプリケーションから自動メール送信する媒体として、他AWSサービスから接続される

今回は主に後者を目的として設置していきます。

やることはこれです。

AWSでWebサービスを作る【目標】
  • メールサーバを立てる      ????
  • 自前のドメインを設定する
  • ユーザID環境を作る
  • ウェブサイト環境を作る
  • APIを作る
  • 他サイト連携を作る
  • DB環境を作る
  • 負荷分散環境を作る
  • ステージング環境を作る
  • DevOps環境を作る

AWS SES 概要

主な機能 適切なドメイン認証、メールアドレス認証設定による高確率な受信が期待できるメール送信環境と、メール受信チャンク(今回受信はやりません)
料金 0.1 USD / 1通(送信・受信とも、添付ファイルは 1GB につき 0.12 USD)
受信チャンクは 0.09 USD / 1,000通
無料条件 月間 62,000 通まで無料(無期限)
受信メールは 1,000 通まで無料

AWS SES 操作記録

リージョンの選択

いきなり注意点ですが、「AWSやってみよう」の目標に今後「ユーザID環境を作る」があります。
これは、 AWS Cognito を利用するのですが、AWS Cognito でユーザの作成やパスワード忘れの時に送信するメールを、このAmazon SES にやらせる予定です。

AWS Cognito からのメールを Amazon SES でやらせる場合、連携できるリージョンに制限があるようです。

AWS Cognito から接続できる Amazon SES のリージョン
  • バージニア
  • オレゴン
  • アイルランド

これ以外の Amazon SES に対しては接続する方法が見つかりませんでしたので、私の記事通りに進めるなら、上記3つのリージョンを選択してから、Amazon SES を作成しましょう。

ドメインの設定

ホームで「Manage Identities」をクリック

「Verify a New Domain」 をクリック

ドメイン名を入力する
「Generate DKIM Settings」は、このドメインから発信したメールが、迷惑メールにならないようにするために設定したほうがよい項目。
(参考:DKIMとは
ドメインのDNSレコードを自由に入力できるならチェックつけたほうがいい。

表示されたキーをDNSに設定する
DKIMは実は3行あるので、知らずにいるとハマります。
また、MXレコードの記載が画面外に隠れていることもありますので、ちゃんと確認しましょう。
SESで利用するメールアドレスでメールを受信しないなら、MXレコードの設定は不要です。

ドメインをAWS Route53 以外で取得していても、この情報をDNSに登録すれば利用OKです。
ただ、Route53 で取得管理している場合でも、簡単に連携してくれるなどの便利さはあまりなさそう・・・

Amazon SES の基礎知識(サンドボックスについて)

ここから、いよいよメール送信をしていくのですが、その前に Amazon SES でしらなきゃならない「Sandbox」に関することを確認します。

参考;https://qiita.com/comefigo/items/454091c595aa56c43751

Amazon SES では、作成直後は「Sandbox」状態となり、「未検証メールアドレスへの送信はできない」ことになります。
「未検証メールアドレス」を「検証済みメールアドレス」にするためには、以下の手順が必要ですが、通常の運用ではこの手順は踏めないと思います。
この手順が踏めれば、Sandbox状態でも運用可能ということになりますね。

Amazon SES メールアドレスの検証手順
  • Amazon SES メニュー[Email Addresses] – Verify a New Email Address で、メールアドレスを登録
  • 登録したメールアドレスに、SESから定型のメール文を送信
  • 上記定型には、確認用URLがあるので、そいつにアクセス
これでは、会員登録用メールとか送ることができないし、SESの都合を知らない一般利用者に、謎のメールが送られ、URLをクリックしてもらうなんて、怪しすぎます。
Sandbox状態では、実用に耐えないことがわかるかと思います。

それもこれも、迷惑メール送信事業者の排除のため、仕方ない措置だと思います。
サンドボックスを解除することにしましょう。

確認方法 – Sending Statistics (左ペイン) – Production Access (右ペイン)を確認

サンドボックス状態の表示

これを、「Enabled」状態にしなければ、未検証メールアドレスへの送信はできません。

サンドボックスが解決された状態の表示

この状態にする手順です。

サンドボックスを解消する

この手順はいたってアナログです。
Amazonのご担当者さんにお願いする。という手順です。

Sending Statistics(左ペイン) – Edit your account details(右ペイン)をクリック

ダイアログの案内に従って情報を入力していきます。

この情報は、担当者さんが人の目で見て審査しているようです。
なので、以下のアドバイスを参考に、思いのたけを入力してください。

Amazon SES Sandboxを抜けるためのアドバイス
■審査を通すために、以下のことをアピールする

  • クリーンなメール送信をすること
  • メール送信拒否する人へのサポートがちゃんとすること
  • 必要最小限のメール送信であること

■Use case description に書くべきこと

  • メーリングリストをどのように構築または取得するか
  • バウンスや苦情はどのように処理するか
  • 受取人は E メールの受信をどのようにオプトアウトできるか(いかに容易にオプトアウトできるか)
  • 送信レートまたは送信クォータは、どのように選択したか(なぜSESを利用するのか)

参考:https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/request-production-access.html

一度の審査ではだいたいは通りません

一度は「あなたの計画ではまだ審査を通せません」なる返信が来ます。
さらに詳しく、さらにクリーンさをアピールして、清廉潔白であることを説明しましょう。
きっと理解してくれることでしょうw

私は2度のやりとりで審査が通りました。

メールアドレスの作成

では、送信メールアドレスを検証しましょう。
サンドボックスを克服しても、送信元メールアドレスは手動で検証しなければいけません。

送信用のメールアドレスを検証に通す

サイドメニュー-Email Addresses、メインメニューのVerify a New Email Addressをクリック。

ちゃんとドメインも付けて作成するメールアドレスを入力 Verify This Email Addressをクリック。
このメールアドレスに、Amazon SES から確認のメールが送られます。

メールアドレスの検証

以下のようなメールが届くので、URLをクリックして検証を完了させます。
URLの先はなぜか「Amazon SES の特徴」ページですが、検証はちゃんとできているようです。

サイドメニュー-Email Addressesを開いて、????で入力したメールアドレスの Verification Status が 「verified」になっていればOK。

まとめ

まずはここまでで、SESの設定はいったん終了です。
この定義を利用して、ユーザID環境である AWSCognito から、検証メールを送信したり、パスワードリマインダーを送信することになります。
SESからメールを送信できることの確認は、Cognito から行いますので、次回の記事にて確認することになります。

ここで行ったSESの設定で、大量同報メールは送信できることになりましたが、今回はその目的はないので、割愛いたします。
今後私自身がその目的が必要になった時に記事作成するか考えます・・・・