首页 > 解决方案 > Nodemailer sentRate 在本地工作,但仅在 Lambda 上发送指定数量的电子邮件

问题描述

我的运输车是这样设置的:

 const ses = new aws.SES();
 var transporter = mailer.createTransport({ 
    SES: ses,
    sendingRate: 25
  });

我有一个 sendEmail 功能,可以设置电子邮件以发送附件:

function sendEmail(body, filename, customer_name) {
  var mailOptions = {
    from: "test@test.com",
    subject: "A test subject - " + customer_name,
    html: '<p>' + customer_name + '</p><br />Please see attached file.',
    to: "testing@testing.com",
    attachments: [
      {
          filename: filename + ".txt",
          content: body.toString()
      }
    ]
  };
  return transporter.sendMail(mailOptions);
};

在 Lambda 中,我将 sendEmail 添加到一组承诺和流程中,如下所示:

module.exports.publish = async (event, context, callback) => {
...
var promises = data.map(async (i) => {
  ...
  await sendEmail(data, file_prefix, customer_name);
};
await Promise.all(promises).then(() => {
   addMessageToLog('Emails sent successfully');
});
await sendSNS(logger).then(() => {
   if (isError) { callback(errorObj); }
   callback(null, 'Emails successfully sent.');
});

我的问题是,当我使用 VS Code 中的无服务器框架在本地调用它时,我的所有电子邮件都以指定的 25/秒速度运行得非常好。当我部署到 AWS Lambda 时,它只发送 25 封电子邮件,然后请求结束。在本地,它向我的 SNS 主题发送我的日志消息,但不在 Lambda 上。每次都在 25 点突然结束。

在这种情况下,我是否正确使用了 sendRate?为什么 AWS Lambda 会结束请求而不是我的本地测试?

标签: node.jsamazon-web-servicesasync-awaitaws-lambdanodemailer

解决方案


我会把它放在这里以防万一其他人遇到这个......

I set the maxConnections to 1 and this fixed my issue on AWS.


推荐阅读