如何使用 Lambda 和 Amazon SES 发送电子邮件?

上次更新时间:2019 年 11 月 6 日

我想通过 AWS Lambda,使用 Amazon Simple Email Service (Amazon SES) 发送电子邮件。我该如何进行配置?

简短描述

要通过 Lambda 使用 Amazon SES 发送电子邮件,您需要执行以下操作:

注意:本文中 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.    将 IAM 策略附加到您计划分配给 Lambda 函数的 IAM 角色。

有关详细步骤,请参阅添加 IAM 身份权限(控制台)。然后,按照使用托管策略作为身份的权限策略(控制台)下的说明执行操作。

验证您的 Amazon SES 身份

验证您将用于发送 Amazon SES 消息的 Amazon SES 身份(电子邮件地址)。

创建或更新您的 Lambda 函数

使用 Lambda 控制台或通过构建并上传您自己的部署程序包,创建 Lambda 函数(如果您还未创建函数)。

1.    在 Lambda 控制台中,在左侧导航窗格中选择函数

2.    选择函数的名称。

3.    在配置窗格的执行角色下,确认已经为您的函数分配了具有 Amazon SES 权限的 IAM 角色。

4.    在编辑器窗格的函数代码下,粘贴以下示例函数代码:

注意:us-west-2 替换为您验证后 Amazon SES 身份的 AWS 区域。将 recipientEmailAddress 替换为您的电子邮件要发送到的目标电子邮件地址。(如果您的账户仍在验证后 Amazon SES 身份区域 Amazon SES 沙盒中,您必须在该账户和区域中将 recipientEmailAddress 改为 Amazon SES 验证后的电子邮件地址。) 将 sourceEmailAddress 替换为 Amazon SES 验证后的发送方电子邮件地址,或者任何来自 Amazon SES 验证后域的电子邮件地址。(可选)根据您的偏好编辑邮件正文(“测试”)和主题行(“测试电子邮件”)。

// 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 身份的区域,会得到一条错误信息“未验证电子邮件地址”和错误代码“MessageRejected”。如果您在不支持 Amazon SES 的区域运行 Lambda 函数,您将收到一条错误消息“无法访问的主机”和错误代码“UnknownEndpoint”。

有关使用 sendEmail API 的更多信息,请参阅适用于 JavaScript 的 AWS 开发工具包文档

5.    选择保存

发送测试电子邮件

1.    在 Lambda 控制台中,为您的函数配置测试事件

注意:必须具备测试有效载荷,但此代码示例中并未使用。

2.    选择测试。Lambda 会使用 Amazon SES 将测试电子邮件发送给您的收件人。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?