LoginSignup
14
12

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-10-31

背景

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


参考

14
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12