Amazon SES でメール送信入門
今回はNode.jsのSDKを使用してAmazon SES APIを使用してからメールを送信してみます。
Amazon SES 概要
- Amazon Simple Email Service(SES)はAmazonのEmail送信サービスです。
- 重量課金制で、最低料金は不要。
- 無料利用枠は、EC2からの送信が62,000件/月、受信が1,000件/月。
必要なもの
・Node.js環境(Linux)
・AWSアカウント
・メールアドレス(送信用と受信用。共に自分で受信できるもの)
用語
- Amazon SES サンドボックス
- 詐欺行為や不正行為防止及びISPからのSPAM認定回避のため、新規ユーザーのアカウントは、サンドボックス(検証目的の環境)に配置され、動作の一部に制限を受けます。
- 検証済みのメールアドレス、もしくは検証済みのドメインでのみメール送受信可能。
- 送信できるのは1日あたり200通まで、1秒あたり1メッセージまで。
- アカウントをサンドボックスの外に移動する手続きを行うと、制限が解除された環境で動作します。
- 手続きには 1 営業日かかるそうです。
- 詐欺行為や不正行為防止及びISPからのSPAM認定回避のため、新規ユーザーのアカウントは、サンドボックス(検証目的の環境)に配置され、動作の一部に制限を受けます。
- アイデンティティー
- 大文字と小文字が区別された、任意の組み合わせのドメインおよび E メールアドレス。(user@example.comとUSER@example.comは別のアイデンティティー)
- Domain Key Idenified Mail(DKIM)
- 送信者が E メールメッセージに署名することによって、それらのメッセージが本物であり、送信中に第三者によって改ざんされていないことを ISP が証明するための標準です。とのことです。
セットアップ
まず、使用する際は送信元(From)アドレスの認証、送信先(To)アドレスの認証が必要です。
Amazon SES を使用してメールを送信する前に、E メールの送信元となるアドレスまたはドメインを検証し、それを所有していることを証明する必要があります。
サンドボックスから移動した後は送信先の認証は不要になります。
主な注意点
- すべての E メールアドレスでは大文字と小文字が区別されます。
- E メールアドレスの検証ステータスは AWS のリージョンごとに別個に扱われます。
Eメールアドレスの確認
以下の手順で送信先、送信元アドレスを検証します。
- Amazon SES コンソールを開きます。
- ナビゲーションペインの [Identities] で [Email Addresses] をクリックします。
- [Verify a New Email Address] をクリックします。
- [Verify a New Email Address] ダイアログボックスの指定フィールドに E メールアドレスを入力し、[Verify This Email Address] をクリックします。
- E メールクライアントで、Amazon SES からのメッセージを開きます。
- メッセージ内のリンクをクリックします。
Amazon SES APIを使う準備
SES用に環境を準備します
AWS SDKのインストール
mkdir ses && cd $_
npm init
npm install aws-sdk --save
AWS設定
今回は新規IAMユーザーを作成しました。
- AWS マネジメントコンソール にサインインし、IAM コンソールを開きます。
- ナビゲーションペインで [Users] を選択し、続いて [Create New Users] を選択します。
- 作成するユーザーのユーザー名を入力します。
- [Create] を選択します。
- 作成時のアクセスキーと、シークレットアクセスキーを控えておきます。
- 作成したユーザーを選択します。
- [Permissions]タブの[Attach Policy]を選択します。
- [Filter]に"ses"と入力し、AmazonSESFullAccessを選択します。
- [Attach Policy]を選択します。
AWSクレデンシャル設定
~/.aws/credentials
を作成して、上記IAMユーザーのアクセスキーを記載します
[default]
aws_access_key_id = アクセスキー
aws_secret_access_key = シークレットアクセスキー
すでに設定がある場合は、プロファイルを追加しましょう。
今回はmailer
として追加しています。
[default]
aws_access_key_id = アクセスキー
aws_secret_access_key = シークレットアクセスキー
[mailer]
aws_access_key_id = 新しいアクセスキー
aws_secret_access_key = 新しいシークレットアクセスキー
メール送信の実行
長い道のりでした。
コードの作成
メール送信のコードを書きます。
最低限必要なものにしてあります。
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
ありがとうございました。