Возможно, я упускаю что-то простое, но у меня закончились попытки / тестирование.
У меня есть две (почти идентичные) функции nodemail, которые я пытаюсь протестировать в AWS Lambda, одна использует обратный вызоввызов, один использует более новый асинхронный вызов.Когда я тестирую локально (используя «Lambda-Local»), оба работают точно так, как ожидалось (то есть я получаю ожидаемое письмо).Когда я тестирую в Lambda, версия обратного вызова работает, как и ожидалось, в то время как асинхронная версия завершается сбоем молча - никаких ошибок, никаких признаков вообще.
Примечание: я целую вечность использовал nodemail в производстве под Lambda через обратные вызовы сникаких проблем, я был просто мотивирован, чтобы попробовать новую асинхронную оболочку export.handler ....
Асинхронная версия (без сбоев):
'use strict'
var aws = require("aws-sdk");
var nodemailer = require("nodemailer");
const ses = new aws.SES({ region: 'us-east-1' });
exports.handler = async (event, context) => {
var mailOptions = {
from: "mymail@mydomain.com",
subject: "This is an email sent from a Lambda function using async!",
html: `<p>Test message</p>`,
to: "mymail@hotmail.com",
};
// create Nodemailer SES transporter
var transporter = nodemailer.createTransport({
SES: ses
});
// send email
transporter.sendMail(mailOptions)
.then( results => {
console.log("Success:", results);
return {
statusCode: 200,
body: JSON.stringify({ "API Success": results }, null),
headers: {
'Access-Control-Allow-Origin': '*',
},
};
})
.catch ( error => {
console.log("Error:", error);
return {
statusCode: 500,
body: JSON.stringify({ "API Error": error }, null),
headers: {
'Access-Control-Allow-Origin': '*',
},
};
})
};
Версия обратного вызова (работает как положено):
'use strict'
var aws = require("aws-sdk");
var nodemailer = require("nodemailer");
const ses = new aws.SES({ region: 'us-east-1' });
exports.handler = function (event, context, callback) {
var mailOptions = {
from: "mymail@mydomain.com",
subject: "This is an email sent from a Lambda function using callbacks!",
html: `<p>Test message</p>`,
to: "mymail@hotmail.com",
};
// create Nodemailer SES transporter
var transporter = nodemailer.createTransport({
SES: ses
});
// send email
transporter.sendMail(mailOptions)
.then( results => {
console.log("Success:", results);
callback(null, {
statusCode: 200,
body: JSON.stringify(results),
headers: {
'Access-Control-Allow-Origin': '*',
},
});
})
.catch ( error => {
console.log("Error:", error);
callback(null, {
statusCode: 500,
body: JSON.stringify(error),
headers: {
'Access-Control-Allow-Origin': '*',
},
});
})
};