【发布时间】:2019-12-13 11:31:50
【问题描述】:
我正在 AWS 上设置一个简单的 NodeJS Lambda 函数来发送电子邮件。
当我在本地运行以下代码时,它可以正常工作。我已收到来自 AWS 的所有凭证,验证了发件人和收件人的电子邮件,并为我的 Lamba 授予了 SES 的所有权限
const aws = require("aws-sdk");
const config = require('../config')
aws.config.update({
accessKeyId: config.mailUser,
secretAccessKey: config.mailPassword,
region:'us-east-1'
});
const ses = new aws.SES({apiVersion: '2010-12-01'});
const sendEmail = async (mailOptions) => {
const {
from,
to,
subject,
html
} = mailOptions
console.log('foo')
ses.sendEmail({
Source: from,
Destination: {
ToAddresses: [to]
},
Message: {
Subject: {
Data: subject,
Charset: 'UTF-8'
},
Body: {
Html: {
Data: html,
Charset: 'UTF-8'
}
}
}
},
(err, data) => {
console.log('baz')
if (err) {
console.error(err);
} else {
console.log('Email sent:');
console.log(data);
}
});
};
console.log('bar')
module.exports = {
sendEmail
};
似乎ses.sendEmail() 在部署该函数时永远不会触发 - 我在 CloudWatch 日志中得到 foo 和 bar,但从未得到 baz。同样,如果在本地运行,一切都运行顺利。
我错过了什么?
【问题讨论】:
-
首先猜测是角色问题。您为 Lambda 附加了哪些角色以及 CloudWatch 日志中显示了什么?
-
我目前在角色策略中有这个,看起来应该足够了(也许没有)` { "Sid": "VisualEditor2", "Effect": "Allow", " Action": "ses:*", "Resource": "*" } ` 到目前为止,我已经在我的代码中几乎每一行都添加了日志,除了
ses.sendMail()回调中的部分之外,它们都会触发
标签: node.js amazon-web-services email aws-lambda amazon-ses