【问题标题】:How to fix sending emails with AWS SES and Lambda?如何修复使用 AWS SES 和 Lambda 发送电子邮件?
【发布时间】: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 日志中得到 foobar,但从未得到 baz。同样,如果在本地运行,一切都运行顺利。
我错过了什么?

【问题讨论】:

  • 首先猜测是角色问题。您为 Lambda 附加了哪些角色以及 CloudWatch 日志中显示了什么?
  • 我目前在角色策略中有这个,看起来应该足够了(也许没有)` { "Sid": "VisualEditor2", "Effect": "Allow", " Action": "ses:*", "Resource": "*" } ` 到目前为止,我已经在我的代码中几乎每一行都添加了日志,除了ses.sendMail() 回调中的部分之外,它们都会触发

标签: node.js amazon-web-services email aws-lambda amazon-ses


【解决方案1】:

https://www.reddit.com/r/aws/comments/bf2iss/lambda_function_not_able_to_send_email_using_ses/elb8vzr/

这是一个很好的解释 - 显然您需要将您的 ses.sendMail 调用包装在一个承诺中,以便它与 AWS Lambda 一起使用。

所有功劳归https://www.reddit.com/user/jsdfkljdsafdsu980p/https://www.reddit.com/user/Enoxice/

【讨论】:

  • 谢谢,我一直在努力解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2016-11-17
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 2018-03-31
  • 2011-08-07
  • 2020-10-20
相关资源
最近更新 更多