top of page
検索
  • 執筆者の写真mon

Amazon CognitoからAmazon SESを使ってメールを送信する

はじめに

Amazon Cognito user poolsではユーザー登録時の招待メールやパスワードリセット時など、いくつかのタイミングでユーザーに対してメールを発出します。 このメールの送信機能は「Cognitoのデフォルト機能による送信」と「Amazon SESによる送信」のいずれかを選ぶことができます。


この2つの違いは以下のとおりです。

機能

Fromアドレス

1日あたり送信数の制限

デフォルト

no-reply@verificationemail.com

50通

SES

任意(※1)

(※2)

※1 自分が受信できるメールアドレスであることが必要

※2 SESの制限による。送信クォータを引き上げるリクエストが可能


Cognitoからのメールは「招待」「自己登録」「Eメール検証」「パスワード忘れ」のタイミングで発出されるので、商用環境では50通/日の制限がないSESの利用が必須になると思います。 また、ビジネス上の要件でFromアドレスを企業のドメインに変えたい場合もSESを使う必要があります。


この記事ではSESとCognitoの一連の設定方法を説明します。


この記事のゴール

  • Cognitoから送信されるメールをSESで設定する


前提条件

  • Userpoolは作成済み

  • Fromに使うメールアドレスは受信可能であること

  • 設定時にCognitoからの検証メールを受信する必要があります

  • SES上で受信可能なメールアドレスを作ることもできますがこの記事では対象外です

  • DNSにレコードを登録する権限

  • Route53が同じAWSアカウントにある場合は自動で設定できます

  • Route53が別アカウントまたは異なるDNSサーバーを使っている場合は、手動でレコードを登録します

  • この記事では no-reply@optarc.net をFromアドレスに設定するため、optarc.net にレコードを追加します


設定方法

CognitoでSESを使用するには、SESで「検証済みEメールID」を登録して、それをUser poolのFromアドレスに設定する必要があります。


Amazon SES

SESを設定するには、まずは「本稼働アクセスのリクエスト」をする必要があります。 SESでは意図せず迷惑メールを大量発出してしまうことなどの対策として、デフォルトでは「サンドボックス」内で機能が制限されているので、これを解除するリクエストが必要になります。


検証済みID(ドメイン)の登録

  1. SESのコンソールから[ID] -> [IDの作成]を選びます。

  2. IDの詳細フォームで以下を入力します。

    1. IDタイプ:ドメイン

    2. ドメイン:メールのFromアドレスのドメイン

    3. デフォルト設定セットの割り当て:OFF

    4. カスタムMAIL FROMドメインの使用:OFF

  3. ドメインの検証フォームで「DKIMの詳細設定」を開き以下を入力します。

    1. IDタイプ:Easy DKIM

    2. DKIM署名キーの長さ:RSA_2048_BIT

    3. DNSレコードのRoute53への発行:OFF

    4. DKIM署名:ON

  4. 登録が完了すると3つのCNAMEレコードが発行されるのでこれをDNSサーバーに登録します。

  5. DNSにレコードを登録してからしばらくするとIDの一覧のIDステータスが「検証済み」に変わります。

本稼働アクセスのリクエスト

ドメインが検証済みになるとメニューの [設定を始める] -> [本稼働アクセスのリクエスト]が使用可能になるので[本稼働アクセスのリクエスト]ボタンをクリックします。


申請フォームでは以下のように内容を入力します。バウンスの処理方法とユーザーのオプトアウト方法の記載が必要なようです。


  • メールタイプ:トランザクション

  • ウェブサイトのURL:User poolを使うアプリケーションのURLを入力します。

  • ユースケースの説明 CognitoUserpoolからのトランザクションメール送信専用で使用する。   バウンス・苦情はSESからSNS経由で管理者がメール受信して対処する。   ユーザーからのオプトアウトはユーザーが管理者に連絡することで対処する。

  • その他の連絡先:この申請に関する連絡先なので、自分のメールアドレスを入力します。申請が受理されるとこのアドレスに通知がきます。

  • 連絡する際の希望言語:Japanese

※ 申請内容は一例です。実際のユースケースに従って申請内容を設定してください。


この申請が受理されて完了メールが来るまで待ちます。ドキュメントによると最大24時間かかるようですが私の場合は1時間以内に通知がきました。 裏ではサポートケースが発行されているようなので、AWSリセラーを利用している場合はリセラーが提供するサポートから返信メールが来ると思います。


メール送信確認

SESからメールが送れることを確認します。


  1. SESのコンソールから[ID] -> 検証済みID(ドメイン)で設定したドメインを選択します。

  2. メッセージの詳細フォームで以下のように入力します。

    1. Eメール形式:フォーマット済み

    2. From-address:test-from (このアドレスはなんでも良いです)

    3. シナリオ:カスタム

    4. カスタム受信者: 自分のメールアドレス

    5. 件名:Test

    6. 本文:Test-Body

カスタム受信者に設定した自分のメールアドレスにメールが届いていればOKです。


検証済みEメールIDの作成

  1. SESのコンソールから[ID] -> [IDの作成]を選びます。

  2. IDの詳細フォームで以下を入力します。

    1. IDタイプ:Eメールアドレス

    2. Eメールアドレス:  no-reply@optarc.net ← 検証済みドメインで受信可能なメールアドレス

  3. 登録が完了すると設定したメールアドレスに Subjectに "Email Address Verification Request"が含まれるメールが届きます。このメール本文のリンク(https://email-verification.us-east-1.amazonaws.comで始まる)をクリックします。

  4. 「おめでとうございます。メールアドレスの検証に成功しました。このアドレスからのメール送信を開始できます。」のページが表示されることを確認します

  5. SESのコンソールから[ID]のリストを表示し、登録したEメールアドレスのIDステータスが「検証済み」になっていることを確認します。


これで、Cognitoへの設定準備が完了しました。


Amazon Cognito (User pool)

CognitoではUser poolのメッセージング設定をSESを使用するように変更します。

User poolの設定

  1. Cognitoのコンソールから目的のUser poolを選択します。

  2. [メッセージング]タブの[Eメール]フォームの[編集]ボタンをクリックします。

  3. [Eメール]フォームで以下を設定して[変更を保存]をクリックします。 Eメールプロバイダ: Amazon SESでEメールを送信 SESリージョン:SESを設定したリージョン 送信元Eメールアドレス:SESで設定したEメールIDを選択 送信者の名前:"表示名<送信元Eメールアドレス>"の形式


確認

User poolにユーザーを登録して、設定したFromアドレスでメールが届くことを確認します。 ユーザー登録時には「Eメールで招待を送信」を選択するとメールが送信されます。


User poolに登録したアドレスが間違っていたらどうなるか

CognitoもSESも基本的にはメール送信のAPIの成功までしか見てくれず、メールアドレスの間違いはAPIで検知することができません。 メールアドレスに間違いがあった場合、送信先のメールサーバーが返すエラーかメールサーバーが不明で返ってきたメールで判断する必要があります。

では、メールはどこに返ってくるかというと送信元のメールアドレスまたはReply-Toに設定したアドレスに返ってくるので、このアドレスにメールが来ていないかを確認すれば良いということになります。


google groupsを使っている場合の注意

企業でGoogleを導入している場合、メーリングリスト的に使用できるgoogle groupsをFromアドレスに使用できます。 google groupsを使うと個人に直接紐づかないメールアドレスをCognitoに設定できるので便利ではあるのですが、前述のエラーの扱いでハマる場合があります(ハマりました)

google groupの仕様として、エラーで返ってきたメールは破棄されてしまいます。


「返送メッセージ」とも呼ばれる配信不能レポート(NDR)をグループに送信または転送することはできません。NDR に似ているメッセージも、送信や転送はできません。

そのため、エラーメールがFromアドレスに返ってくることを期待していると検知できないという事態になります。


この場合は、SESで「フィードバック通知」という設定をしてSNS Topicにエラーメールが来たことを通知するようにしなければなりません。 この設定については次の記事で書こうと思います。

閲覧数:10回0件のコメント

Comments


bottom of page