web-dev-qa-db-fra.com

Envoi de courrier électronique via AWS SES dans AWS Lambda

J'ai créé une fonction simple très basique sur AWS Lambda qui sera utilisée pour accepter les soumissions de formulaire. 

Une partie de la fonction consistera à envoyer un email à une personne en particulier, assez simple. J'essaie d'utiliser AWS SES pour ce faire. J'ai configuré le service SES, etc., et vérifié le compte que je souhaite envoyer et j'ai pu envoyer un courrier électronique test. Tout fonctionne !! 

Désormais, lorsque j'essaie de faire la même chose dans AWS Lambda et d'utiliser le sdk d'aws, il n'envoie pas l'e-mail. Je ne reçois pas d'erreur ou quoi que ce soit. 

Vous trouverez ci-dessous le code que j'utilise pour la fonction AWS Lambda. 

Quelqu'un a-t-il déjà utilisé lambda et envoyé des courriels via une fonction lambda? Ou même, tout simplement, en utilisant le noeud.js aws sdk serait probablement utile. 

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

Il semblerait que le context.succeed (événement) ait été placé dans la mauvaise zone de code. 

Une fois que je l'ai déplacé dans le rappel sendEmail tout a fonctionné.

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

En effet, Lambda gèle le conteneur lorsque la fonction est fermée et que tous les processus asynchrones, tels que votre courrier électronique, sont gelés. Ceci est particulièrement vrai avec Node. Voir Modèle de programmation Lambda. http://docs.aws.Amazon.com/lambda/latest/dg/lambda-introduction.html

0
halt00