Node.js
AWS
ses

Amazon SES でメールを送ってみた

More than 1 year has passed since last update.

Amazon SES でメール送信入門

今回はNode.jsのSDKを使用してAmazon SES APIを使用してからメールを送信してみます。

Amazon SES 概要

必要なもの

・Node.js環境(Linux)
・AWSアカウント
・メールアドレス(送信用と受信用。共に自分で受信できるもの)

用語

  • Amazon SES サンドボックス
    • 詐欺行為や不正行為防止及びISPからのSPAM認定回避のため、新規ユーザーのアカウントは、サンドボックス(検証目的の環境)に配置され、動作の一部に制限を受けます。
      • 検証済みのメールアドレス、もしくは検証済みのドメインでのみメール送受信可能。
      • 送信できるのは1日あたり200通まで、1秒あたり1メッセージまで。
    • アカウントをサンドボックスの外に移動する手続きを行うと、制限が解除された環境で動作します。
      • 手続きには 1 営業日かかるそうです。
  • アイデンティティー
    • 大文字と小文字が区別された、任意の組み合わせのドメインおよび E メールアドレス。(user@example.comUSER@example.comは別のアイデンティティー)
  • Domain Key Idenified Mail(DKIM)
    • 送信者が E メールメッセージに署名することによって、それらのメッセージが本物であり、送信中に第三者によって改ざんされていないことを ISP が証明するための標準です。とのことです。

セットアップ

まず、使用する際は送信元(From)アドレスの認証、送信先(To)アドレスの認証が必要です。

Amazon SES を使用してメールを送信する前に、E メールの送信元となるアドレスまたはドメインを検証し、それを所有していることを証明する必要があります。

サンドボックスから移動した後は送信先の認証は不要になります。

主な注意点

  • すべての E メールアドレスでは大文字と小文字が区別されます。
  • E メールアドレスの検証ステータスは AWS のリージョンごとに別個に扱われます。

Eメールアドレスの確認

以下の手順で送信先、送信元アドレスを検証します。
1. Amazon SES コンソールを開きます。
2. ナビゲーションペインの [Identities] で [Email Addresses] をクリックします。
3. [Verify a New Email Address] をクリックします。
4. [Verify a New Email Address] ダイアログボックスの指定フィールドに E メールアドレスを入力し、[Verify This Email Address] をクリックします。
5. E メールクライアントで、Amazon SES からのメッセージを開きます。
6. メッセージ内のリンクをクリックします。

Amazon SES APIを使う準備

SES用に環境を準備します

AWS SDKのインストール

mkdir ses && cd $_
npm init
npm install aws-sdk --save

AWS設定

今回は新規IAMユーザーを作成しました。
1. AWS マネジメントコンソール にサインインし、IAM コンソールを開きます。
2. ナビゲーションペインで [Users] を選択し、続いて [Create New Users] を選択します。
3. 作成するユーザーのユーザー名を入力します。
4. [Create] を選択します。
5. 作成時のアクセスキーと、シークレットアクセスキーを控えておきます。
6. 作成したユーザーを選択します。
7. [Permissions]タブの[Attach Policy]を選択します。
8. [Filter]に"ses"と入力し、AmazonSESFullAccessを選択します。
9. [Attach Policy]を選択します。

AWSクレデンシャル設定

~/.aws/credentialsを作成して、上記IAMユーザーのアクセスキーを記載します

~/.aws/credentials
[default]
aws_access_key_id = アクセスキー
aws_secret_access_key = シークレットアクセスキー

すでに設定がある場合は、プロファイルを追加しましょう。
今回はmailerとして追加しています。

~/.aws/credentials
[default]
aws_access_key_id = アクセスキー
aws_secret_access_key = シークレットアクセスキー

[mailer]
aws_access_key_id = 新しいアクセスキー
aws_secret_access_key = 新しいシークレットアクセスキー

メール送信の実行

長い道のりでした。

コードの作成

メール送信のコードを書きます。
最低限必要なものにしてあります。

index.js
var AWS = require('aws-sdk');
AWS.config.update({region: 'us-east-1'});

var ses = new AWS.SES();

var params = {
  Destination: {
    ToAddresses: [ 'ichiro@example.com' ]
  },
  Message: {
    Body: {
      Text: {
        Data: 'こんにちは SES',
        Charset: 'utf-8'
      }
    },
    Subject: {
      Data: 'こんにちは',
      Charset: 'utf-8'
    }
  },
  Source: 'jiro@example.com' // From
};

ses.sendEmail(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

Run!

index.jsを実行します!

$ AWS_PROFILE=mailer node index.js
{ ResponseMetadata: { RequestId: '892ca512-b9bb-1ce5-b0de-1fe95eb2bce1' },
  MessageId: '00000152342d3439-57799589-e3i5-4h2b-8g5c-dd8c5f8fd7f1-000000' }

※クレデンシャルをdefaultで設定した場合はAWS_PROFILE=mailerは不要です

メールが届けば大成功です!

なお、ダメな場合はドバっとエラーが出ます。

参考URL

ありがとうございました。