我正在尝试在amazon-ses上使用aws-lambda服务,以便向已验证的收件人发送电子邮件。
我正在关注this简单教程,其中显示了一个简单的nodejs功能:
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 Log组内未提供任何状态信息:
REPORT RequestId: XXX Duration: 534.59 ms Billed Duration: 600 ms Memory Size: 128 MB Max Memory Used: 117 MB
任何帮助将不胜感激。
EDIT:我在sandbox-mode
工作,source和recipient都是来自代码中提到的区域的经过验证的电子邮件(它也反映在日志中-没有抛出任何错误)。
我在SO中发现了以下问题-但对我的案子没有相关答案:
Sending email via AWS SES within AWS Lambda function
您的代码非常好。我只是尝试使用您的代码,所以没有问题。
我建议您检查身份设置和沙盒模式。
如果您仍处于沙盒模式,则仅允许您将电子邮件从已验证的电子邮件地址发送到其他已验证的电子邮件地址。
This文档将很有帮助。
我认为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
};