Amazon SES を使用してNode.jsからメールを送信する

Amazon SES を使用してNode.jsからメールを送信する:


背景

AWS上で公開する予定のWebアプリケーションにおいて、ユーザーアカウントのパスワードリセットなどのタイミングでアプリケーションからメールを送信したい。


要件

  • Route53 で登録しているドメイン名のアドレス (support@xxx.yyy.zzz) をFROMとする
  • TOは任意のメールアドレス
  • Node.jsから送信する


1. Amazon SESのセットアップ


SESコンソールの表示

  • AWSコンソールから Simple Email Service を選択


    Amazon SES はアジアパシフィック(東京)リージョンでは提供されていないので、サービスメニューの グループ では見つからない。表示を A-Z に変更するか、 SES で検索する。
  • リージョンを選択する画面が表示される。 米国東部(バージニア北部) を選択


    (別に米国西部でも問題ないが、どのリージョンを選んだかは後に必要になるので覚えておく)


ドメインの認証

(すでに Route53 でドメイン名を取得・登録している前提)


  • Identity Management > Domains を選択

  • Verify a New Domain をクリック
  • Domain名を入力、Generate DKIM Settings にチェックを入れて Verify This Domain をクリック


    • DKIM については下記参照。DNSに CNAME のエントリが2つ追加される。
  • メールが送信されるので、その本文のリンクをクリック
  • SESのコンソールで verified となっていることを確認


DKIM: DomainKeys Identified Mail

ドメインキー・アイデンティファイド・メール(DKIM: DomainKeys Identified Mail)とは、電子メールの認証技術である。DKIMは、署名するMail transfer agent(MTA)から検証するMTAまで、ほぼエンド・ツー・エンドの完全性を提供する。多くの場合、署名するMTAが発信者に代わりDKIM-Signatureヘッダを追加し、また検証するMTAがDNSを通じて発信者の公開鍵を検索する事で、受信者に代わり署名の正当性を立証する。
ドメインキー・アイデンティファイド・メール - Wikipedia


送信先メールアドレスの登録

上限緩和申請を行うまでは サンドボックス環境 が使用される。

サンドボックス環境ではメールは確認済みアドレスにのみ送信可能となる。

SESのコンソールからメールアドレスを登録する


  • Identity Management > Email Addresses を選択

  • Verify a New Email Address をクリック
  • 受信可能なメールアドレスを登録
  • メールが送信されるので、その本文のリンクをクリック
  • SESのコンソールで verified となっていることを確認


テストメールの送信

Route53で登録しているドメインのメールアドレスから送信先メールアドレスにメールが送信できるか確認する。


  • Identity Management > Domains を選択
  • 登録したドメインの左チェックボックスをクリック

  • Send a Test Email をクリック
  • ダイアログが表示されるので、以下の情報を入力して送信

    • FROMに @ 以前を入力 (今回は support とする)
    • TOに 送信先メールアドレスの登録 で登録したメールアドレスを入力
    • Subject, Bodyは適当に入力
  • メールが受信できていることを確認する


2. IAMユーザー登録

  • AWSコンソールのヘッダーメニューでログインユーザー名をクリック

  • セキュリティ認証情報 をクリック
  • ダイアログが表示されるので Get Started with IAM Users を選択

  • ユーザーを追加 をクリック

    • ウィザードを進め、適当なロールを作成して AmazonSESFullAccess の権限を与える
  • アクセスキー、シークレットキーをコピペしておく


credentialsファイルの作成


  • ~/.aws/credentials ファイルを作成する
    IAMユーザー登録 でメモしたアクセスキー、シークレットキーを貼り付け
[default] 
aws_access_key_id=AK****************** 
aws_secret_access_key=NAB************************************* 
すでに credentials ファイルが存在する場合は [ses] など適当なプロファイル名を付けて追記する。

複数プロファイルを登録した場合、環境変数 AWS_PROFILE で使用するプロファイルを指定する。


3. JavaScriptからメール送信

aws-sdk を使ってメールを送る。

npm install --save aws-sdk 
index.js
const AWS = require('aws-sdk'); 
 
// 米国東部(バージニア北部) - 西部なら us-west-2 
AWS.config.update({ region: 'us-east-1' }); 
const ses = new AWS.SES(); 
 
const params = { 
  Destination: { 
    ToAddresses: [ 
      'kazunori.kimura.js@gmail.com', 
    ], 
  }, 
  Message: { 
    Body: { 
      Text: { 
        Data: 'こんにちは、テストメールです', 
        Charset: 'utf-8' 
      }, 
    }, 
    Subject: { 
      Data: 'こんにちは、こんにちは!', 
      Charset: 'utf-8', 
    }, 
  }, 
  // From 
  Source: 'support@xxx.yyy.zzz', 
}; 
 
ses.sendEmail(params, (err, res) => { 
  if (err) { 
    console.log(err); 
  } 
  console.log(res); 
}); 
かんたん!


4. 上限緩和申請を行う

本番環境では任意のメールアドレスに送信することになるため、上限緩和申請を行う。

SESのコンソールにて Email Sending > Sending Statistics などを表示すると、画面上部に上限緩和申請への案内が表示される。

詳細は下記の記事を参照: Amazon SESによるメール送信環境の構築と実践 | DevelopersIO



参考

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)