Отправка электронной почты через AWS SES в рамках функции AWS Lambda
Я создал очень простую простую функцию на AWS Lambda, которая будет использоваться для приема представлений форм.
часть функции будет отправлять электронное письмо конкретному человеку, довольно просто. Для этого я пытаюсь использовать AWS SES. Я настроил службу SES и т. д. и проверил учетную запись, которую я хочу отправить, и смог отправить тестовое письмо. Все работает!!
теперь, когда я пытаюсь сделать то же самое в AWS Lambda и использовать aws sdk it не отправляет электронное письмо. Я не получаю ошибку или что-то еще.
Ниже приведен код, который я использую для функции AWS Lambda.
у кого-нибудь был опыт использования лямбда и отправки электронных писем через ses, через функцию лямбда? Или даже просто использовать узел.JS aws sdk, скорее всего, будет полезен.
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);
};
2 ответов
похоже, что у меня был контекст.succeed (событие) помещено в неправильную область кода.
Как только я переместил его в обратный вызов sendEmail, все сработало.
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);
}
});};
Это потому, что лямбда замораживает контейнер, когда функция выходит, и любые асинхронные процессы заморожены, такие как ваша электронная почта. Это особенно верно для Node. См. Модель Лямбда-Программирования. http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html