Lambda と Amazon SES を使用して E メールを送信する方法を教えてください。
AWS Lambda と Amazon Simple Email Service (Amazon SES) を使用してメールを送信したいと考えています。
簡単な説明
Amazon SES を使用して Lambda 関数から E メールを送信するには、次の手順を実行します。
1. Lambda が API 呼び出しを実行するための AWS Identity and Access Management (IAM) ポリシーと実行ロールを作成します。
2. Amazon SES の ID (ドメインまたは E メールアドレス) を確認してください。
3. Amazon SES 経由で E メールを送信するロジックを含む Lambda 関数を作成または更新します。
**注:**E メールに PDF の添付ファイルを含めるには、Amazon SES SendRawEmail APIオペレーションを使用する必要があります。詳細については、GitHub の「Amazon SES API を使用して未処理の E メールを送信する」を参照してください。
解決策
注: この記事の Node.js、Python、Ruby Lambda 関数のコード例は、ユースケースに応じて変更する必要があります。例をユースケースに合わせて調整するか、任意のプログラミング言語で自分自身でコードを設計してください。
Lambda が API 呼び出しを実行するための IAM ポリシーと実行ロールを作成する
1. JSON ポリシーエディタを使用して IAM ポリシーを作成します。ポリシーを作成したら、次の JSON ポリシードキュメントをポリシーエディタに貼り付けます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ses:SendEmail", "ses:SendRawEmail" ], "Resource": "*" } ] }
**注:**このポリシーへのアクセスを制限する方法の詳細と例については、Amazon SES の IAM ポリシーの例を参照してください。
2. IAM ポリシーを IAM ロールにアタッチします。手順については、「IAM ID アクセス権限の追加 (コンソール)」の「管理ポリシーをアイデンティティのアクセスポリシーとして使用するには (コンソール)」セクションを参照してください。
**注:**次のステップで、この IAM ロールを Lambda 関数に割り当てます。
Amazon SES の ID (ドメインまたは E メールアドレス) を確認する
ドメインを検証するには、「DNS プロバイダーによる DKIM ドメイン ID の検証」を参照してください。
E メールアドレスを確認するには、「E メールアドレス ID の検証」を参照してください。
Amazon SES 経由で E メールを送信するロジックを含む Lambda 関数を作成または更新する
1. まだの場合は、Lambda 関数を作成してください。
注: Lambda 関数は、Lambda コンソールを使用するか、デプロイパッケージをビルドしてアップロードすることで作成できます。
2. Lambda コンソールの左側のナビゲーションペインで、[Functions] (関数) を選択します。
3. 関数の名前を選択します。
4. [設定] タブの [許可] ペインで、関数の [実行ロール] を確認します。以前に作成した Amazon SES アクセス権限を持つ IAM ロールがリストされていることを確認します。正しい IAM ロールがリストにない場合は、関数に正しいロールを割り当ててください。
5. [関数コード] の下のエディターペインに、以下のサンプル関数コードを貼り付けます。使用している Node.js、Python、または Ruby のランタイムとバージョンに関連する例を必ず使用してください。
重要: us-west-2 は、検証済みの Amazon SES の ID が属する AWS リージョンに置き換えてください。"RecipientEmailAddress", ... を、E メールアドレス、または E メールを送信したいアドレスに置き換えます。SourceEmailAddress を、Amazon SES 検証済み送信者の E メールアドレスまたは Amazon SES 検証済みドメインの E メールアドレスに置き換えます。必要に応じて、メッセージ本文 (「テスト」) と件名 (「テストメール」) を編集します。
Node.js バージョン 18 以降については、次のコード例を参照してください。
// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import { SESClient, SendEmailCommand } from "@aws-sdk/client-ses"; const ses = new SESClient({ region: "us-west-2" }); export const handler = async(event) => { const command = new SendEmailCommand({ Destination: { ToAddresses: ["RecipientEmailAddress", ...], }, Message: { Body: { Text: { Data: "Test" }, }, Subject: { Data: "Test Email" }, }, Source: "SourceEmailAddress", }); try { let response = await ses.send(command); // process data. return response; } catch (error) { // error handling. } finally { // finally. } };
Node.js バージョン 16 以前については、次のコード例を参照してください。
// 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 = async function (event) { var params = { Destination: { ToAddresses: ["RecipientEmailAddress", ...], }, Message: { Body: { Text: { Data: "Test" }, }, Subject: { Data: "Test Email" }, }, Source: "SourceEmailAddress", }; return ses.sendEmail(params).promise() };
Python バージョン 3.9 については、次のコード例を参照してください。
import json import boto3 client = boto3.client('ses', region_name='us-west-2') def lambda_handler(event, context): response = client.send_email( Destination={ 'ToAddresses': ['RecipientEmailAddress'] }, Message={ 'Body': { 'Text': { 'Charset': 'UTF-8', 'Data': 'This is the message body in text format.', } }, 'Subject': { 'Charset': 'UTF-8', 'Data': 'Test email', }, }, Source='SourceEmailAddress' ) print(response) return { 'statusCode': 200, 'body': json.dumps("Email Sent Successfully. MessageId is: " + response['MessageId']) }
Ruby バージョン 2.7 については、次のコード例を参照してください。
require "aws-sdk-ses" $ses = Aws::SES::Client.new(region: "us-west-2") def lambda_handler(event:, context:) resp = $ses.send_email({ destination: { to_addresses: ["RecipientEmailAddress"], }, message: { body: { text: { charset: "UTF-8", data: "This is the message body in text format.", }, }, subject: { charset: "UTF-8", data: "Test email", }, }, source: "SourceEmailAddress" }) { statusCode: 200, body: JSON.generate("Message Sent Successfully. #{resp.to_h} ") } end
sendEmail API の使用方法の詳細については、JavaScript、Python、Ruby、および Java V2 の AWS SDK ドキュメントを参照してください。
6. [デプロイ] を選択します。
(オプション) テスト E メールの送信
1. Lambda コンソールで、関数のテストイベントを設定します。
注: テストペイロードは必須ですが、このコード例では使用していません。
2. [テスト] を選択します。Lambda は Amazon SES を使用してテストメールを受信者に送信します。
関連情報
関連するコンテンツ
- 質問済み 3ヶ月前lg...
- 質問済み 1年前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 2年前
- AWS公式更新しました 2年前