Envoyer un e-mail via AWS SES dans la fonction Lambda AWS

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

Partie de la fonction sera d'envoyer un mail à une personne en particulier, assez simple. Je suis en train d'utiliser AWS SES dans cette. J'ai mis en place le service SES etc, et vérifié le compte que je souhaite envoyer et j'ai été en mesure d'envoyer un e-mail de test. Toutes les oeuvres!!

maintenant, quand j'essaie de faire la même chose au sein D'AWS Lambda et que j'utilise le sdk d'aws, ce n'est pas envoyer l'e-mail. Je n'ai pas d'erreur ou quoi que ce soit.

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

quelqu'un a-t-il déjà utilisé lambda et envoyé des e-mails via ses, via une fonction lambda? Ou même juste en utilisant le nœud.js aws sdk serait plus que 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: ["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);
};
33
demandé sur Darren 2015-09-16 15:23:00

2 réponses

Il semblerait que j'ai le contexte.réussir(événement), placée 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: ["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);
    }
});};
19
répondu Darren 2017-10-13 09:52:54

C'est parce que Lambda gèle le conteneur lorsque la fonction sort et que tout processus async est gelé, comme votre e-mail. Cela est particulièrement vrai avec le Noeud. Voir Modèle De Programmation Lambda. http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html

0
répondu halt00 2017-07-25 01:47:36