Posted at

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

More than 3 years have 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

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