Pregunta Enviar correo electrónico a través de AWS SES dentro de la función AWS Lambda


Creé una función simple muy básica en AWS Lambda que se usará para aceptar envíos de formularios.

Parte de la función será enviar un correo electrónico a una persona en particular, bastante simple. Estoy tratando de usar AWS SES para hacer esto. Configuré el servicio SES, etc., y verifiqué la cuenta a la que deseo enviar y pude enviar un correo electrónico de prueba. ¡Todo funciona!

Ahora, cuando intento hacer lo mismo dentro de AWS Lambda y uso el sdk aws, no envía el correo electrónico. No obtengo un error ni nada.

A continuación se muestra el código que estoy usando para la función AWS Lambda.

¿Alguien ha tenido alguna experiencia usando lambda y enviando correos electrónicos a través de ses, a través de una función lambda? O incluso simplemente usar node.js aws sdk sería muy útil.

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

32
2017-09-16 12:23


origen


Respuestas:


Parece que tuve el context.succeed (evento) colocado en el área equivocada de código.

Una vez que lo cambié a la devolución de llamada de sendEmail, todo funcionó.

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

18
2017-09-16 13:35



Esto se debe a que Lambda congela el contenedor cuando la función finaliza y se congela cualquier proceso asíncrono, como su correo electrónico. Esto es especialmente cierto con Node. Ver el modelo de programación de Lambda. http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html


0
2017-07-25 01:47