如何使用 Lambda 和 Amazon SES 发送电子邮件?
我想使用 AWS Lambda 通过 Amazon Simple Email Service (Amazon SES) 发送电子邮件。
简短描述
要通过 Amazon SES 使用 Lambda 函数发送电子邮件,请完成以下操作:
1. 为 Lambda 创建 AWS Identity and Access Management (IAM) 策略和执行角色以运行 API 调用。
2. 验证您的 Amazon SES 身份(域或电子邮件地址)。
3. 创建或更新 Lambda 函数,并在其中包含通过 Amazon SES 发送电子邮件的逻辑。
**注意:**要在电子邮件中包含 PDF 附件,您必须使用 Amazon SES SendRawEmail API 运算。有关详细信息,请参阅 GitHub 上的使用 Amazon SES API 发送原始电子邮件。
解决方法
**注意:**使用本文中的 Node.js、Python 和 Ruby Lambda 函数代码示例时,请务必根据您的用例进行修改。请根据您的用例调整示例,或者使用您喜欢的编程语言设计自己的代码。
为 Lambda 创建 IAM Policy 和执行角色以运行 API 调用
1. 使用 JSON 策略编辑器创建 IAM 策略。创建策略时,请将以下 JSON 策略文档粘贴到策略编辑器中:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ses:SendEmail", "ses:SendRawEmail" ], "Resource": "*" } ] }
**注意:**有关如何限制访问此策略的更多信息和示例,请参阅 Amazon SES 的示例 IAM 策略。
2. 将 IAM 策略附加到 IAM 角色。有关说明,请参阅添加 IAM 身份权限(控制台)中的**使用托管策略作为身份的权限策略(控制台)**部分。
**注意:**按照以下步骤操作将此 IAM 角色分配至您的 Lambda 函数。
验证您的 Amazon SES 身份(域或电子邮件地址)
要验证域,请参阅向您的 DNS 提供商验证 DKIM 域身份。
要验证电子邮件地址,请参阅验证电子邮件地址身份。
创建或更新 Lambda 函数,并在其中包含通过 Amazon SES 发送电子邮件的逻辑。
1. 如果您尚未执行以上操作,请创建 Lambda 函数。
**注意:**您可以使用 Lambda 控制台或通过构建和上传部署包来创建 Lambda 函数。
2. 在 Lambda 控制台的左侧导航窗格中,选择函数。
3. 选择您的函数的名称。
4. 在配置选项卡的权限窗格中,查看函数的执行角色。确认其中列出了您之前创建的具有 Amazon SES 权限的 IAM 角色。如果未列出正确的 IAM 角色,则为该函数分配正确的角色。
5. 在函数代码下的编辑器窗格中,将以下函数代码示例中的任一个粘贴到窗格中。务必使用您的运行时系统和相应版本的 Node.js、Python 或 Ruby 的相关示例。
**重要事项:**请将 us-west-2 替换为您经过验证的 Amazon SES 身份所在的 AWS 区域。请将 "RecipientEmailAddress", ... 替换为您要向其发送电子邮件的一个或多个电子邮件地址。请将 SourceEmailAddress 替换为您经过验证的 Amazon SES 发件人电子邮件地址或来自 Amazon SES 验证域的任何电子邮件地址。或者,编辑邮件正文(“测试”)和主题行(“测试电子邮件”)。
对于 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. 选择部署。
(可选)发送测试电子邮件
1. 在 Lambda 控制台中,为您的函数配置测试事件。
**注意:**测试有效负载是必需的,但不用于此代码示例。
2. 选择测试。Lambda 使用 Amazon SES 向您的收件人发送测试电子邮件。
相关信息
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前