Lambda と Amazon SES を使用して E メールを送信するにはどうすればよいですか?

最終更新日: 2019 年 11 月 6 日

Amazon Simple Email Service (Amazon SES) を使用して E メールを送信するために AWS Lambda を使用したいと考えています。どのように設定すればよいか教えてください。

簡単な説明

Amazon SES を使用して Lambda から E メールを送信するには、以下が必要です。

注: この記事の Node.js の Lambda 関数コードの例は、そのまま提供されています。例をユースケースに合わせるか、好みのプログラミング言語で自分自身のものをデザインしてください。

解決方法

IAM ポリシーと実行ロールを作成する

1.    JSON ポリシーエディタを使用して IAM ポリシーを作成します。この JSON ポリシードキュメントを、ポリシーエディターに貼り付けます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ses:SendEmail",
                "ses:SendRawEmail"
            ],
            "Resource": "*"
        }
    ]
}

注: この IAM ポリシーへのアクセスを制限する方法を含む詳細については、「Amazon SES の IAM ポリシーの例」を参照してください。

2.    Lambda 関数に割り当てる予定の IAM ロールに IAM ポリシーをアタッチしてください。

詳細な手順については、「IAM ID アクセス許可の追加 (コンソール)」を参照してください。その後、「管理ポリシーを ID (コンソール) のアクセス許可ポリシーとして使用する方法」の手順に従ってください。

Amazon SES の ID を確認する

Amazon SES メッセージの送信元となる Amazon SES ID (ドメインまたは E メールアドレス) を確認します。

Lambda 関数を作成または更新する

まだ行っていない場合は、Lambda コンソールを使用するか、独自のデプロイパッケージを構築してアップロードすることによって、Lambda 関数を作成します。

1.    Lambda コンソールの左側のナビゲーションペインで、[関数] を選択します。

2.    関数の名前を選択します。

3.    [設定] ペインの [実行ロール] で、Amazon SES アクセス許可を持つ IAM ロールが自分の関数に割り当てられていることを確認します。

4.    [関数コード] の下のエディタペインに、以下のサンプル関数コードを貼り付けます。

注意: us-west-2 を、検証済みの Amazon SES ID の AWS リージョンに置き換えます。recipientEmailAddress を、E メールの送信先の E メールアドレスに置き換えます。(アカウントが、検証済みの Amazon SES ID のリージョンの Amazon SES サンドボックスにまだある場合は、 recipientEmailAddress を、同じアカウントとリージョンの Amazon SES 検証済み E メールアドレスに変更する必要があります。) sourceEmailAddress を、Amazon SES 検証済み送信者の E メールアドレスまたは Amazon SES 検証済みドメインの E メールアドレスに置き換えます。オプションで、メッセージ本文 ("テスト") と件名 ("テスト E メール") を好みに合わせて編集します。

// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

var aws = require('aws-sdk');
var ses = new aws.SES({region: 'us-west-2'});

exports.handler = (event, context, callback) => {
    
     var params = {
        Destination: {
            ToAddresses: ["recipientEmailAddress"]
        },
        Message: {
            Body: {
                Text: { Data: "Test"
                    
                }
                
            },
            
            Subject: { Data: "Test Email"
                
            }
        },
        Source: "sourceEmailAddress"
    };

    
     ses.sendEmail(params, function (err, data) {
        callback(null, {err: err, data: data});
        if (err) {
            console.log(err);
            context.fail(err);
        } else {
            
            console.log(data);
            context.succeed(event);
        }
    });
};

注意: us-west-2 を検証済みの Amazon SES ID のリージョンに変更しない場合、エラーコード「MessageRejected」で「Email address is not verified」というエラーメッセージが表示されます。Amazon SES がサポートされていないリージョンで Lambda 関数を実行すると、エラーコード「UnknownEndpoint」で「Inaccessible host」というエラーメッセージが表示されます。

sendEmail API の使用の詳細については、「AWS SDK for JavaScript のドキュメント」を参照してください。

5.    [保存] を選択します。

テストメールを送信する

1.    Lambda コンソールで、関数用のテストイベントを設定します。

注: テストペイロードは必須ですが、このコード例には使用されていません。

2.    [テスト] を選択します。Lambda は Amazon SES を使用してテスト E メールを受信者に送信します。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合