webentwicklung-frage-antwort-db.com.de

Senden von E-Mails über AWS SES innerhalb der AWS Lambda-Funktion

Ich habe in AWS Lambda eine sehr einfache Funktion erstellt, die zur Annahme von Formularsendungen verwendet wird. 

Ein Teil der Funktion besteht darin, eine E-Mail an eine bestimmte Person zu senden, ziemlich einfach. Ich versuche, AWS SES zu verwenden, um dies zu tun. Ich habe den SES-Dienst usw. eingerichtet und das Konto, an das ich senden möchte, überprüft und konnte eine Test-E-Mail versenden. Alles funktioniert!! 

Wenn ich jetzt in AWS Lambda dasselbe versuche und die aws sdk verwende, wird die E-Mail nicht versendet. Ich bekomme keinen Fehler oder irgendetwas. 

Unten ist der Code, den ich für die AWS-Lambda-Funktion verwende. 

Hat jemand Erfahrung mit der Verwendung von Lambda und dem Senden von E-Mails über ses über eine Lambda-Funktion? Oder auch nur die Verwendung des node.js aws sdk wäre höchstwahrscheinlich hilfreich. 

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

Es scheint, dass ich den context.succeed (event) in den falschen Bereich des Codes gestellt habe. 

Nachdem ich es in den sendEmail-Callback verschoben hatte, funktionierten alle.

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

Dies liegt daran, dass Lambda den Container einfriert, wenn die Funktion beendet ist und asynchrone Prozesse (z. B. Ihre E-Mail) eingefroren werden. Dies gilt insbesondere für Node. Siehe Lambda-Programmiermodell. http://docs.aws.Amazon.com/lambda/latest/dg/lambda-introduction.html

0
halt00