node.js - servicio - Enviar correo electrónico a través de AWS SES dentro de la función AWS Lambda
ses amazon email (2)
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
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: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: output.Key1
}
},
Subject: {
Data: "Ses Test Email"
}
},
Source: "[email protected]"
};
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);
};
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: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: output.Key1
}
},
Subject: {
Data: "Ses Test Email"
}
},
Source: "[email protected]"
};
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);
}
});};