从 AWS Lambda 函数发送电子邮件
Sending an email from an AWS Lambda function
我已经创建了一个基本的 lambda 函数,它应该从 SES 服务发送电子邮件,但它不起作用。
我已经学习了本教程:here。我已经创建了正确的 IAM 策略并将其附加到该函数,但我认为这不是问题所在。
我已经为函数创建了一个测试配置,但控制流没有到达 sendEmail 内部,我不确定为什么。
const aws = require('aws-sdk')
const ses = new aws.SES({ region: 'us-east-1' });
exports.handler = async (event, context, callback) => {
const printOut = JSON.stringify(event);
console.log(`Received event: ${printOut}`);
const params = {
Destination: {
ToAddresses: ["xxxxx.xxxx@gmail.com"]
},
Message: {
Body: {
Text: {
Data: event['desc']
}
},
Subject: {
Data: "Email from xxxxxxx Contact Us Form"
}
},
Source: "xxxxxxxxxxxxxxxxx@gmail.com"
};
console.log(`sending: ${JSON.stringify(params)}`);
ses.sendEmail(params, function (err, data) {
callback(null, { err: err, data: data });
if (err) {
console.error(err);
context.fail(err);
} else {
console.log(data);
context.succeed(event);
}
console.log(`Done!`);
});
};
这是我当前的输出:
Response:
null
Request ID:
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx"
Function Logs:
START RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx Version: $LATEST
2019-11-12T01:28:48.352Z xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx INFO Received event: {"name":"Redacted","email":"xxxxx.xxxx@gmail.com","desc":"Test message"}
2019-11-12T01:28:48.372Z xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx INFO sending: {"Destination":{"ToAddresses":["xxxxx.xxxx@gmail.com"]},"Message":{"Body":{"Text":{"Data":"Test message"}},"Subject":{"Data":"Email from xxxxxx Contact Us Form"}},"Source":"xxxxxxxxxxxxxxx@gmail.com"}
END RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx
REPORT RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx Duration: 590.10 ms Billed Duration: 600 ms Memory Size: 128 MB Max Memory Used: 94 MB Init Duration: 359.55 ms
如您所见,从未调用 sendEmail 函数内的控制台 outs/errors。不太清楚为什么。
我确实确保验证了我正在测试的两个电子邮件地址,但没有骰子。
您必须使其成为非异步的或 return 返回给调用者的承诺(您可以 return 直接向运行时承诺)。像这样:
const aws = require('aws-sdk')
const ses = new aws.SES({region: 'us-east-1'});
exports.handler = async (event, context, callback) => {
const printOut = JSON.stringify(event);
console.log(`Received event: ${printOut}`);
const params = {
Destination: {
ToAddresses: ["xxxxx.xxxx@gmail.com"]
},
Message: {
Body: {
Text: {
Data: event['desc']
}
},
Subject: {
Data: "Email from xxxxxxx Contact Us Form"
}
},
Source: "xxxxxxxxxxxxxxxxx@gmail.com"
};
console.log(`sending: ${JSON.stringify(params)}`);
return ses.sendEmail(params, null).promise();
};
我已经创建了一个基本的 lambda 函数,它应该从 SES 服务发送电子邮件,但它不起作用。
我已经学习了本教程:here。我已经创建了正确的 IAM 策略并将其附加到该函数,但我认为这不是问题所在。
我已经为函数创建了一个测试配置,但控制流没有到达 sendEmail 内部,我不确定为什么。
const aws = require('aws-sdk')
const ses = new aws.SES({ region: 'us-east-1' });
exports.handler = async (event, context, callback) => {
const printOut = JSON.stringify(event);
console.log(`Received event: ${printOut}`);
const params = {
Destination: {
ToAddresses: ["xxxxx.xxxx@gmail.com"]
},
Message: {
Body: {
Text: {
Data: event['desc']
}
},
Subject: {
Data: "Email from xxxxxxx Contact Us Form"
}
},
Source: "xxxxxxxxxxxxxxxxx@gmail.com"
};
console.log(`sending: ${JSON.stringify(params)}`);
ses.sendEmail(params, function (err, data) {
callback(null, { err: err, data: data });
if (err) {
console.error(err);
context.fail(err);
} else {
console.log(data);
context.succeed(event);
}
console.log(`Done!`);
});
};
这是我当前的输出:
Response:
null
Request ID:
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx"
Function Logs:
START RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx Version: $LATEST
2019-11-12T01:28:48.352Z xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx INFO Received event: {"name":"Redacted","email":"xxxxx.xxxx@gmail.com","desc":"Test message"}
2019-11-12T01:28:48.372Z xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx INFO sending: {"Destination":{"ToAddresses":["xxxxx.xxxx@gmail.com"]},"Message":{"Body":{"Text":{"Data":"Test message"}},"Subject":{"Data":"Email from xxxxxx Contact Us Form"}},"Source":"xxxxxxxxxxxxxxx@gmail.com"}
END RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx
REPORT RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx Duration: 590.10 ms Billed Duration: 600 ms Memory Size: 128 MB Max Memory Used: 94 MB Init Duration: 359.55 ms
如您所见,从未调用 sendEmail 函数内的控制台 outs/errors。不太清楚为什么。
我确实确保验证了我正在测试的两个电子邮件地址,但没有骰子。
您必须使其成为非异步的或 return 返回给调用者的承诺(您可以 return 直接向运行时承诺)。像这样:
const aws = require('aws-sdk')
const ses = new aws.SES({region: 'us-east-1'});
exports.handler = async (event, context, callback) => {
const printOut = JSON.stringify(event);
console.log(`Received event: ${printOut}`);
const params = {
Destination: {
ToAddresses: ["xxxxx.xxxx@gmail.com"]
},
Message: {
Body: {
Text: {
Data: event['desc']
}
},
Subject: {
Data: "Email from xxxxxxx Contact Us Form"
}
},
Source: "xxxxxxxxxxxxxxxxx@gmail.com"
};
console.log(`sending: ${JSON.stringify(params)}`);
return ses.sendEmail(params, null).promise();
};