Nodemailer sendRate работает локально, но отправляет только указанное количество писем на Lambda - PullRequest
0 голосов
/ 29 мая 2019

Мой транспортер настроен так:

 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.');
});

Моя проблема заключается в том, что когда я вызываю это локально, используя Serverless Framework в VS Code, все мои электронные письма работают отлично, со скоростью, равной 25 в секунду, как указано. Когда я развертываюсь в AWS Lambda, он просто отправляет 25 электронных писем, после чего запрос заканчивается. Локально, он отправляет мою тему SNS мои сообщения журнала, но не на Lambda. Это резко заканчивается в 25 каждый раз.

Правильно ли я использую sendRate в этом случае? Почему AWS Lambda заканчивает запрос, а не мой тест локально?

1 Ответ

0 голосов
/ 29 мая 2019

Я положу это здесь для потомков на случай, если кто-нибудь еще столкнется с этим ...

Я установил maxConnections равным 1, и это устранило мою проблему на AWS.

...