Help us understand the problem. What is going on with this article?

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

前回の記事で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));
    });
};

以上!

duplicate1984
エンジニア見習いです。 C#.NET, Laravel PHP, Python, JS, Oracle, Mysql, Win, Linux, AWS
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした