【问题标题】:AWS SES on Lambda - fails (silently) to send emailLambda 上的 AWS SES - 无法(静默)发送电子邮件
【发布时间】:2020-03-25 11:43:38
【问题描述】:

我正在尝试在 上使用 服务,以便向经过验证的收件人发送电子邮件。

我正在关注this 简单教程,其中显示了一个简单的 函数:

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

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);
        }
    });
};

以下策略是 lambda 角色的一部分:

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

由于某种原因,此 lambda 函数无法发送任何电子邮件,并且它未在函数的 CloudWatch 日志组内提供任何状态信息:

REPORT RequestId: XXX   Duration: 534.59 ms Billed Duration: 600 ms Memory Size: 128 MB Max Memory Used: 117 MB 


任何帮助将不胜感激。



编辑:我在 sandbox-mode 工作,sourcerecipient 都是来自代码中提到的地区的经过验证的电子邮件(它是也反映在日志中 - 没有抛出错误)。


我在 SO 中找到了以下问题 - 但没有与我的案例相关的答案:

Sending email via AWS SES within AWS Lambda function

AWS SES send email lambda not sending every time

SES email not sending

python error sending mail with amazon ses with aws lambda

【问题讨论】:

  • callback(null, {err: err, data: data}); 放在最后,在else 块之后,看看会丢弃什么。
  • 函数好像超时了,你是在VPC中启动的吗?尝试在没有 VPC 的情况下启动它?
  • No Timeout - 函数在 534.59 [ms] 后成功返回(参见上面的日志)。在没有 VPC 的情况下启动。
  • 这里有什么解决方案吗?我想不会……

标签: amazon-ses aws-lambda nodejs amazon-web-services aws-lambda amazon-iam amazon-ses


【解决方案1】:

我认为context.succeed 已被弃用。你也可以使用async/await:

exports.handler = async (event, context) => {

 var params = {
    Destination: {
        ToAddresses: ["recipientEmailAddress"]
    },
    Message: {
        Body: {
            Text: { Data: "Test" }
        },
        Subject: { Data: "Test Email" }
    },
    Source: "sourceEmailAddress"
};

const data = ses.sendEmail(params).promise()
return data
};

【讨论】:

    【解决方案2】:

    您的代码非常好。我刚刚尝试使用您的代码,它没有问题。

    我建议您检查您的身份设置和沙盒模式。

    如果您仍处于沙盒模式,它只允许您从经过验证的电子邮件地址向其他经过验证的电子邮件地址发送电子邮件。

    This 文档会很有帮助。

    【讨论】:

    • 感谢@pilijoong - 来源和收件人都是经过验证的电子邮件(如果其中一个未经过验证,则会反映在日志中)。
    • 除了您发布的行之外,您没有看到任何其他日志消息。以防万一您检查了电子邮件帐户中的垃圾邮件文件夹
    • 我的意思是,如果电子邮件未验证有问题,则日志中会出现相关错误(类似错误:未验证 XXX 电子邮件)。无论如何,为您的回答 +1,因为您指出了一个重要问题。
    • 是的,垃圾邮件/垃圾文件夹已检查。
    猜你喜欢
    • 2020-11-25
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 2019-12-07
    • 2020-03-02
    相关资源
    最近更新 更多