Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
89
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

Organization

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

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
89
Help us understand the problem. What are the problem?