今回は Amazon Simple Email Service (Amazon SES) です。 Amazon SESはいわゆるメール送信サービスで、SMTPサーバの機能を提供するサービスです。 EC2などAWS上のサーバが使うSMTPサーバとして使用することができます。というか、いわゆるSMTPサーバなので、普通にThunderbirdなどのメーラ(MUA)からメール送信すると、自前のプログラムからメールを送信するとかにも利用可能です。
リージョンは下記の3つしかまだないようなので今回は「米国東部 (バージニア北部)」( us-east-1 )を選択しました。
Amazon SESは IMAPなどのメールサービスではないので、送信元となるメールアドレスは自分で準備しておきます。 その送信元となる Email アドレスを登録するため、メニューの「Email Addresses」 を選択。
「Verify a New Email Address」 をクリック
送信元の Email アドレスを入力して、「Verify This New Email Address」をクリックします。
すると、該当アドレスに本人確認のためのメールが飛んできます。 飛んできた確認メールを処理すると、ほどなくしてStatusが下記の通り「pending verification」から「verified」となるはずです。
以上で、送信元アドレスの登録が完了しました。
Amazon SES サンドボックス外への移動 - Amazon Simple Email Service にあるとおり、スパムとか不正行為の抑止のためにAmazon SES は初期状態では「サンドボックス」内での運用になっているようです。 この状態だと 送信元の本人確認だけでなく送信先の本人確認も必要など、いろいろな制限があるようです。Amazon SESを本番運用で使用したい場合は、サンドボックス外に移動するための手続き(申請)を行う必要があります。
サンドボックス外に移動するための申請とは具体的には Amazon SESの送信制限を解除する(SandBoxの外へ移動する) | infoScoop開発者ブログ などに書いてあることをすればよいのですが、いったん今回は、送信先のアドレスも上記と同様のやり方で、Amazon SESに登録しておきます。
つづいて、このSMTPサーバを使うためのユーザを作成します。 SMTP Settingsの「Create My SMTP Credentials」 をクリックします。
あ、ちなみにココのページに書いてある
Server Name: email-smtp.us-east-1.amazonaws.com
がSMTPサーバ名となっています。
SMTPのユーザ名は、AWSの IAM ユーザの「アクセスキー ID」になります。この画面では IAMユーザ名を指定してユーザを作成しますが、メール送信に使用するSMTPユーザ名は「アクセスキー ID」なので、IAMユーザ名はデフォルトのままでもよいかもしれません。
「作成」をクリックするとIAMユーザが作成されます。そのユーザの「アクセスキーID」と「シークレットアクセスキー」が、SMTPユーザのユーザ名とパスワードになります。「アクセスキーID」と「シークレットアクセスキー」は、作成完了画面で下記のとおり確認することができます。
以上でSMTPユーザの作成が完了しました。
さて、もろもろの設定やSMTPユーザの作成が完了したので、ThunderbirdなどのメーラにSMTPの設定をおこなってメール送信してみてください。 具体的には
などを設定すればOKです。
さいごに、プログラムからSMTPを指定してメールを送信してみます。Nodejsにはメール送信するライブラリ nodemailerというのがあるので、コレを使いました。 Githubに置いてあるので、適宜参照ください。
$ git clone https://github.com/masatomix/nodejs-samples.git -b feature/ses_mail $ cd nodejs-samples
設定ファイルは以下の通り:
$ cat config/default.json { "smtp": { "host": "email-smtp.us-east-1.amazonaws.com", "port": 465, "secure": true, // true for 465, false for other ports "auth": { "user": "AKIAxxxxxxxxxxx", ← 正しいものに変更 "pass": "Aixxxxxxxxxxxxxxxxxxxxx" ← 正しいものに変更 } }, "mail": { "from": "from@example.com", ←送信元アドレス "to": "to@example.com" ← 送信先アドレス } }
送信プログラムは以下の通り:
$ cat index.js "use strict"; const me = this; const logger = require('./logger'); const config = require('config'); const nodemailer = require("nodemailer"); module.exports.execute001 = () => { const transporter = nodemailer.createTransport(config.smtp); const mailOptions = { from: config.mail.from, to: config.mail.to, subject: 'test mail', text: 'メール送信テスト' }; transporter.sendMail(mailOptions, (error, info) => { if (error) { logger.console.error("send mail failed."); logger.console.error(error.message); } logger.console.debug("send mail success."); logger.console.debug('Message sent: %s', info.messageId); }); }; me.execute001();
プログラムを実行してみます。やりかたは、あ、Nodejsが入ってる前提ですが
$ npm install $ npm start
でメールが送信されると思います。
おつかれさまでした。
この記事は
現在のアクセス:4418