【问题标题】:AWS SES service issue in sending mail using lambda使用 lambda 发送邮件时的 AWS SES 服务问题
【发布时间】: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


【解决方案1】:

我认为这里发生了几件事:

  1. 返回 Promise 的 JavaScript 函数必须是 async
  2. 您的 Lambda 函数可能会超时(默认为 3 秒)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2020-06-11
    • 2016-11-17
    • 2018-03-31
    • 2020-11-25
    相关资源
    最近更新 更多