12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【AWS】Lambda+Amazon SESでメールを送信する

Posted at

前回の記事でAmazon SNSを利用してSMSを送信するlambdaを書きました。
今回はメールを送信するためにAmazon SESを利用していきます。

#やりたいこと
lambdaからのキックでメールを送信したいと思います。
ただし、宛先のメールアドレスはlambda内で指定したいと思います。

Amazon SMSでもメールの送信は可能ですが、予め作成したサブスクリプションで認証済みのメールアドレス宛にしか送信できません。
そこで今回はAmazon SESを使用します。

#Amazon SESって?
システムエンジニアリングサービス…ではなく
Amazon Simple Email Serviceです。

従量課金制のEメール送信サービスです。
2020年5月現在、東京リージョンではサポートされていません。
エンドユーザーへのマーケティングや、ヘルスチェック系の通知などに利用できます。

#コードとかより注意しておきたいこと
###サンドボックスの解除
Amazon SESで送信元アドレス(ドメイン)を新たに登録すると、最初はサンドボックス環境で動作します。
サンドボックス環境においては送信数の制限があるうえ、
検証済みのメールアドレス宛にしか送信できません(SNSのような状態)。

そのため本番で運用するには制限解除を申請する必要があります。
制限解除は送信数の上限引き上げ、という名目ですが、これによりサンドボックス環境の解除がされるので、
検証済み以外のアドレスにも送りたい、という場合でも制限解除を申請します。

また、制限解除をする場合には、予めバウンス(送信失敗)や苦情(受信者にスパム登録される)への対策を行っておく必要があります。
バウンス率や苦情率が高いとメール送信ができなくなってしまうので、注意しましょう。

登録した送信元アドレス(ドメイン)ごとに、バウンス・苦情の発生時に通知する設定をSES内でできるので、
忘れずにやっておきましょう。

#構成
キャプチャ.PNG

#Amazon SESに新規アドレス(ドメイン)を登録
Amazon SESコンソールを開きます。
今回はバージニア北部リージョンで利用します。

左のメニューからDomainsまたはEmail Addressesを選択し、
新規の送信元アドレス(ドメイン)を登録します。

今回はメールアドレスの登録をやっていきます。
「Verify a new Email Address」を選択します。↓こんな画面です。
tempsnip.png

「Verify This Email Address」を選択すると、入力したメールアドレス宛に検証メールが届きますので、検証します。

以上です。
「Send a Test Email」からテストメールの送信ができるので一応確認しておきましょう。

また、サンドボックス環境の解除については、lambdaからのテストなどが一通り完了してから行いましょう。
最悪テストでバウンス率が高まってメール停止されるかもしれないので。

#lambda関数
単にSESを呼び出して、指定したアドレスにメールを送信するだけのlambdaです。
ランタイムはNode.js 12.xです。

test_SendEmail.js
var aws = require('aws-sdk');
// バージニア北部リージョンを選択
var ses = new aws.SES({region: 'us-east-1'});


exports.handler = (event, context, callback) => {
   
    // メール送信設定
    var params = {
        Destination: {
            ToAddresses: ['送信先メールアドレス']
        },
        Message: {
            Body: { Text: { Data: 'メッセージ' } },
            Subject: { Data: '件名' }
        },
        Source: '検証済みの送信元アドレス'
    };

    // メール送信
    ses.sendEmail(params, function (err, data) {
        if (err) {
            console.log(err);
            context.fail(err);
        }
        console.log(data);
        context.succeed(data));
    });
};

以上!

12
13
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?