【Nuxt.js(Vue.js)】Amazon SESから簡単にメールを送信する方法
こんにちは、タロウです。
開発していて、このような悩みにぶち当たることがあります。
- 手軽にメール送りたい
- メールサーバーなんて立てる工数ない
- インフラ・メール送信にそこまで知識がない
そんな悩みをサクッと解決してくれるサービスを紹介します。
Amazon SES
読み方:アマゾン エスイーエス
Amazon Simple Email Serviceの通称で、任意のアプリケーションからメールを送信できるようにするAWSのサービスです。
使った分(送信した分)だけ費用がかかるスケーラブルなメールサービスです。
料金
▼EC2上で稼働しているアプリケーションからの送信
最初の62,000通 | 無料 |
---|---|
それ以降 1,000通ごと | 0.10 USD(10.43 円) |
▼メールクライアントやその他環境からの送信
1,000通ごと | 0.10 USD(10.43 円) |
---|
▼メール受信
最初の1,000通 | 無料 |
---|---|
それ以降 1,000通ごと | 0.10 USD(10.43 円) |
※104円/ドルで計算
動作イメージ
nuxtjs(js)上からaws sdkを使用してAmazonSES経由でメールを送信する流れになります。
- プログラムを使用可能なIAMを準備
- 送信元アドレスを登録
- AWS cliをインストール
- AWS cliへIAM情報を登録
- メールテンプレート作成
- Amazon SESへメールテンプレートを設定
- メール送信処理
大きく↑の手順でメール送信まで簡単に進めることができます。
プログラム使用から可能なIAMを準備
作成後に表示されるクライアントキーと、シークレットキーをメモして残しておきます。
送信元アドレスを登録
Amazon SESコンソールのEmailAddressからアドレスを登録します。
▲送信元のアドレスを入力して”Verify This Email Address”を押すと、入力したメールアドレス宛に確認メールが送信されます。
▲メールアドレスの承認待ち(確認待ち状態になります)
▲入力したアドレス宛に届いている確認URLを押す
▲URLにアクセスして再度コンソールから状態を見ると、”verified”になっています。
デフォルト状態(登録済みの状態)ではAmazonSESに登録したアドレス宛にのみメール送信が可能となります。
外部アドレス(未登録アドレス)へも送信したい場合は、AWSに送信制限の解除申請を行う必要があります。(後述)
AWS cliをインストール
公式ドキュメントを参考に各OSにあったインストール方法で導入します。
インストールが完了し下記がバージョン確認が取れれば完了です!
$ aws --version
aws-cli/1.16.102 Python/2.7.16 Linux/4.14.133-113.112.amzn2.x86_64 botocore/1.12.92
AWS cliへIAM情報を登録
コマンドから設定できるように前手順で作成したIAMを設定します。
$ aws configure
AWS Access Key ID [None]: *************** // IAMユーザーのAccess Key
AWS Secret Access Key [None]: *************** // IAMユーザーのSecret Access Key
Default region name [None]: us-west-2 // リージョンを設定。今回はオレゴンを使用するので、"us-west-2"で設定
Default output format [None]: json // フォーマット。今回はjsonで設定するので、"json"で設定
メールテンプレート作成
任意のディレクトリにテンプレートファイルを作成します。
{
"Template": {
"TemplateName": "testTemplate",
"SubjectPart": "テンプレートタイトル",
"HtmlPart": "
テンプレート本文
■置換文字列1 {{str1}}
■置換文字列2 {{str2}}
",
"TextPart": "テキスト形式時に表示する本文"}
}
TemplateName
テンプレート名を指定します。
AmazonSESへのテンプレート登録や、メールを送信する際のテンプレート指定に使用します。
SubjectPart
タイトルを入力します。
メール送信時に指定することができないので、ここで指定します。
HtmlPart
HTMLベースの本文を設定します。
メール送信時に置換文字列を設定することができ、{{置換キー}}を埋め込むことで置換することができます。
TextPart
テキストベースの本文を設定します。
Amazon SESへメールテンプレートを設定
メールテンプレートをAmazonSESへ設定します。
jsonを格納したディレクトリに移動してcliで設定します。
テンプレート登録
cd [テンプレートのjsonが格納されているディレクトリ]
aws ses create-template --cli-input-json file://contactTemplate.json --region us-west-2
テンプレート更新
cd [テンプレートのjsonが格納されているディレクトリ]
aws ses update-template --cli-input-json file://contactTemplate.json --region us-west-2
▲テンプレートが登録されるとコンソール上に表示されます。
※リンク先のリージョンは”オレゴン”になっているのでSESを展開したリージョンに読み替えてください。
メール送信処理
テンプレートまで登録できるとあとは送信するだけです。
送信先・送信元アドレス、使用するテンプレートを指定します。
const AWS = require('aws-sdk');
AWS.config.loadFromPath(`config/~~~~~~.json`); // credentials(資格情報)を定義したjsonを指定
AWS.config.update({ region: 'us-west-2' }); // リージョンを設定
const ses = new AWS.SES();
// 送信メールテンプレート
let mail_template = {
Destination: {
ToAddresses: [test@test.co.jp], // 送信先アドレス(配列で複数設定可能)
},
Source: 'noreply@test.co.jp', // 送信元アドレス
Template: 'testTemplate', // 使用するテンプレート名
TemplateData:
'{"name":"testUser","text":"hogehoge"}', // テンプレート内に入れる値
};
// テンプレートを使用してメール送信
ses.sendTemplatedEmail(mail_template ,function (err, data) {
if (err) {}
else {}
}
SES送信制限緩和について
デフォルトではメール送信数や、送信先が制限されいていますので制限以上に送信するためにはその制限を解除する必要があります。
公式リファレンスはこちら
申請手順
申請画面に遷移する
こちらの制限解除申請を開きます。
申請フォームに入力する
バウンス通知、および苦情通知を受け取った場合に従うプロセスを詳しく説明してください – optionalここは未入力でも解除してもらえました。
Limit type | SES送信制限 | 制限解除対象のサービスを選択します。 |
---|---|---|
メールの種類 – optional | システム通知 | AmazonSESが使用されるメールの種類を選択します。 |
ウェブサイトの URL – optional | AmazonSESを使用するアプリケーションのURLを入力します。 | |
あなたのメールを明確にリクエストした受信者のみに送信する方法を詳しく説明してください – optional | ここは未入力でも解除してもらえました。 | |
AWS サービス条件 と AUP を順守しますか? – optional | はい |
リージョン | 米国西部(オレゴン) | AmazonSESを使用するリージョンを指定します。 |
---|---|---|
Limit | 希望する一日あたりの送信クォータ | 解除対象の項目を指定します。 |
New limit value | 50000 | 設定してほしい上限値を入力します。 |
Use case description | アプリケーションからのメール送信で自動返信メールに独自ドメインを使用したいため。 | 使用目的を入力します。 |
---|
全て必要な項目を入力して、申請すると
契約者のメールアドレス宛に“受付しました”メールが届きます。
Amazonからの返信を待つ
数日後にAmazon側から制限解除完了のメールが届き、解除完了になります。
動作確認
AmazonSESに登録していないメールアドレス宛にメールを送信し、問題なく受信できれば確認OKです。
さいごに
いかがでしょうか。
数ステップでメール送信について一連の流れを実装することができました。
一つ共通ロジックを作ってしまえば、システム内の各所でメール送信を行うことが容易となります。
Eメールは段々と使われなくなってきている印象がありますが、まだまだ廃れないツールです。
AWSを使ってるなら使わない手はないので、是非覚えておきたいサービスです!