在AWS Lambda函数中通过AWS SES发送电子邮件

我在AWS Lambda上创build了一个非常基本的简单函数,用于接受表单提交。

部分function将是发送电子邮件给一个特定的人,非常简单。 我正在尝试使用AWS SES来执行此操作。 我已经设置了SES服务等,并validation了我想发送的账户,并且能够发送testing邮件。 所有的作品!

现在,当我在AWS Lambda中尝试并使用aws sdk时,它不会发送电子邮件。 我没有得到一个错误或任何东西。

以下是我用于AWS Lambda函数的代码。

有没有人有任何经验使用lambda和通过ses,通过lambda函数发送电子邮件? 甚至只是使用node.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); }; 

看起来,我有上下文。成功(事件)放在错误的代码区域。

一旦我把它移动到sendEmailcallback所有工作。

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

这是因为当函数退出并且任何asynchronous进程被冻结时,Lambda会冻结容器,例如您的电子邮件。 Node尤其如此。 请参阅Lambda编程模型。 http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html