【发布时间】:2020-08-23 03:13:55
【问题描述】:
我有一个基本 AWS 账户,我们在其中部署了 lambda 函数。此外,我们还在 lambda 函数中配置了 AWS SES 服务以发送电子邮件(我们的 SES 服务也被移出沙箱并增加了限制)。
我们大约每分钟发送两封电子邮件,但我们发现我们很少收到邮件,但大多数时候我们都没有收到任何电子邮件。
我们还尝试在两个区域部署应用程序,但没有一个成功。
示例代码
const AWS = require('aws-sdk');
//AWS Options
const options = {
region: 'us-east-1',
// accessKeyId not required because of server less app (SWS policy added in role)
// secretAccessKey not required because of server less app (SWS policy added in role)
}
const ses = new AWS.SES(options);
const sendEmail = (sender, receivers, subject, content) => {
console.log("Sending From", sender);
console.log("REceiver Email", receivers);
const promise = new Promise((resolve, reject) => {
ses.sendEmail({
Source: sender,
Destination: {
ToAddresses: receivers
},
Message: {
Subject: {
Data: subject
},
Body: {
Html: {
Data: content
}
}
}
}, (err, data) => {
if (err) {
console.log(err)
reject(err)
}
resolve(data)
});
});
return promise
};
【问题讨论】:
-
您不需要创建自己的承诺。您可以使用
return ses.sendEmail(params).promise()。是否记录了任何错误?此 Lambda 的 CloudWatch Logs 显示了什么? -
是的,我试过
return ses.sendEmail(params).promise(),但它并没有解决我的问题。 -
在 CloudWatch Logs 中打印前两个调试控制台语句,注意其他打印的消息 ID 或错误。
-
你的
sendEmail函数应该是async。此外,理想情况下,您应该使用 SDK 函数的 .promise() 变体,但这不是原因。并确保您的 Lambda 没有超时(默认超时为 3 秒)。 -
谢谢@jarmod,我会检查超时。
标签: node.js amazon-web-services aws-lambda serverless amazon-ses