Отправка электронной почты через AWS SES в рамках функции AWS Lambda

Я создал очень простую простую функцию на AWS Lambda, которая будет использоваться для приема представлений форм.

часть функции будет отправлять электронное письмо конкретному человеку, довольно просто. Для этого я пытаюсь использовать AWS SES. Я настроил службу SES и т. д. и проверил учетную запись, которую я хочу отправить, и смог отправить тестовое письмо. Все работает!!

теперь, когда я пытаюсь сделать то же самое в AWS Lambda и использовать aws sdk it не отправляет электронное письмо. Я не получаю ошибку или что-то еще.

Ниже приведен код, который я использую для функции AWS Lambda.

у кого-нибудь был опыт использования лямбда и отправки электронных писем через ses, через функцию лямбда? Или даже просто использовать узел.JS aws sdk, скорее всего, будет полезен.

var aws = require('aws-sdk');
var ses = new aws.SES({
   accessKeyId: 'myAccessKey',
   secretAccesskey: 'mySecretKey',
   region: 'eu-west-1' 
});

exports.handler = function(event, context) {
    console.log("Incoming: ", event);
    var output = querystring.parse(event);

    var eParams = {
        Destination: {
            ToAddresses: ["toAddress@email.com"]
        },
        Message: {
            Body: {
                Text: {
                    Data: output.Key1
                }
            },
            Subject: {
                Data: "Ses Test Email"
            }
        },
        Source: "mysource@source.com"
    };

    console.log('===SENDING EMAIL===');
    var email = ses.sendEmail(eParams, function(err, data){
        if(err) console.log(err);
        else {
            console.log("===EMAIL SENT===");
            console.log(data);
        }
    });
    console.log("EMAIL CODE END");
    console.log('EMAIL: ', email);
    context.succeed(event);
};

2 ответов


похоже, что у меня был контекст.succeed (событие) помещено в неправильную область кода.

Как только я переместил его в обратный вызов sendEmail, все сработало.

var aws = require('aws-sdk');
var ses = new aws.SES({
  accessKeyId: 'myAccessKey',
  secretAccesskey: 'mySecretKey',
  region: 'eu-west-1' 
});

exports.handler = function(event, context) {
  console.log("Incoming: ", event);
  var output = querystring.parse(event);

  var eParams = {
    Destination: {
        ToAddresses: ["toAddress@email.com"]
    },
    Message: {
        Body: {
            Text: {
                Data: output.Key1
            }
        },
        Subject: {
            Data: "Ses Test Email"
        }
    },
    Source: "mysource@source.com"
};

console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data){
    if(err) {
       console.log(err);
       context.fail(err);
    };
    else {
        console.log("===EMAIL SENT===");
        console.log("EMAIL CODE END");
        console.log('EMAIL: ', email);
        console.log(data);
        context.succeed(event);
    }
});};

Это потому, что лямбда замораживает контейнер, когда функция выходит, и любые асинхронные процессы заморожены, такие как ваша электронная почта. Это особенно верно для Node. См. Модель Лямбда-Программирования. http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html