Nodemailer завершается с ошибкой при вызове Lambda async export.handler - PullRequest
0 голосов
/ 13 апреля 2019

Возможно, я упускаю что-то простое, но у меня закончились попытки / тестирование.

У меня есть две (почти идентичные) функции 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': '*',
           },
        });  

    })

};
...