aws-lambda - 将 SES 交付、退回日志存储到 DynamoDB
问题描述
我已使用以下链接将通过 Amazon SNS 发送的 Amazon SES 通知存储在 DynamoDB 中
https://aws.amazon.com/premiumsupport/knowledge-center/lambda-sns-ses-dynamodb/
我能够看到表格中生成的字段。
以下是 Lambda 函数
--------------------------Lambda Code Begins------------------------
console.log("Loading event");
var aws = require("aws-sdk");
var ddb = new aws.DynamoDB({ params: { TableName: "SESNotifications" } });
exports.handler = function (event, context, callback) {
console.log("Received event:", JSON.stringify(event, null, 2));
var SnsPublishTime = event.Records[0].Sns.Timestamp;
var SnsTopicArn = event.Records[0].Sns.TopicArn;
var SESMessage = event.Records[0].Sns.Message;
SESMessage = JSON.parse(SESMessage);
var SESMessageType = SESMessage.notificationType;
var SESMessageId = SESMessage.mail.messageId;
var SESDestinationAddress = SESMessage.mail.destination.toString();
var LambdaReceiveTime = new Date().toString();
if (SESMessageType == "Bounce") {
var SESreportingMTA = SESMessage.bounce.reportingMTA;
var SESbounceSummary = JSON.stringify(SESMessage.bounce.bouncedRecipients);
var itemParams = {
Item: {
SESMessageId: { S: SESMessageId },
SnsPublishTime: { S: SnsPublishTime },
SESreportingMTA: { S: SESreportingMTA },
SESDestinationAddress: { S: SESDestinationAddress },
SESbounceSummary: { S: SESbounceSummary },
SESMessageType: { S: SESMessageType },
},
};
ddb.putItem(itemParams, function (err, data) {
if (err) {
callback(err)
} else {
console.log(data);
callback(null,'')
}
});
} else if (SESMessageType == "Delivery") {
var SESsmtpResponse1 = SESMessage.delivery.smtpResponse;
var SESreportingMTA1 = SESMessage.delivery.reportingMTA;
var itemParamsdel = {
Item: {
SESMessageId: { S: SESMessageId },
SnsPublishTime: { S: SnsPublishTime },
SESsmtpResponse: { S: SESsmtpResponse1 },
SESreportingMTA: { S: SESreportingMTA1 },
SESDestinationAddress: { S: SESDestinationAddress },
SESMessageType: { S: SESMessageType },
},
};
ddb.putItem(itemParamsdel, function (err, data) {
if (err) {
callback(err)
} else {
console.log(data);
callback(null,'')
}
});
} else if (SESMessageType == "Complaint") {
var SESComplaintFeedbackType = SESMessage.complaint.complaintFeedbackType;
var SESFeedbackId = SESMessage.complaint.feedbackId;
var itemParamscomp = {
Item: {
SESMessageId: { S: SESMessageId },
SnsPublishTime: { S: SnsPublishTime },
SESComplaintFeedbackType: { S: SESComplaintFeedbackType },
SESFeedbackId: { S: SESFeedbackId },
SESDestinationAddress: { S: SESDestinationAddress },
SESMessageType: { S: SESMessageType },
},
};
ddb.putItem(itemParamscomp, function (err, data) {
if (err) {
callback(err)
} else {
console.log(data);
callback(null,'')
}
});
}
};
------------------------Lambda Code Ends----------------------------
以下是 SNS 通知
{
"notificationType": "Delivery",
"mail": {
"timestamp": "2021-01-01T00:00:00.000Z",
"source": "test@mydomain.in",
"sourceArn": "arn:aws:ses:ap-south-1:123456789000:identity/mydomain.in",
"sourceIp": "123.123.123.123",
"sendingAccountId": "123456789000",
"messageId": "1234567890-ap-south-1",
"destination": [
"something@hotmail.com",
"something@gmail.com"
],
"headersTruncated": false,
"headers": [
{
"name": "Received",
"value": "from DELL-Admin-PC"
},
{
"name": "MIME-Version",
"value": "1.0"
},
{
"name": "From",
"value": "\"SES Test\" <test@mydomain.in>"
},
{
"name": "To",
"value": "something@gmail.com, something@hotmail.com"
},
{
"name": "Date",
"value": "01 Jan 2021 00:00:00 +0530"
},
{
"name": "Subject",
"value": "Test Email from SES"
},
{
"name": "Content-Type",
"value": "text/plain; charset=us-ascii"
},
{
"name": "Content-Transfer-Encoding",
"value": "quoted-printable"
}
],
"commonHeaders": {
"from": [
"SES Test <test@mydomain.in>"
],
"date": "01 Jan 2021 00:00:00 +0530",
"to": [
"something@gmail.com",
"something@hotmail.com"
],
"subject": "Test Email from SES"
}
},
"delivery": {
"timestamp": "2021-01-01T00:00:00.000Z",
"processingTimeMillis": 1534,
"recipients": [
"something@gmail.com"
],
"smtpResponse": "250 2.0.0 OK 1234567890 f11si2056653pgr.168 - gsmtp",
"remoteMtaIp": "74.125.24.27",
"reportingMTA": "c123-123.smtp-out.ap-south-1.amazonses.com"
}
}
请指导我如何在表格中捕获 From、Subject 和 Date。
解决方案
推荐阅读
- environment-variables - uname.c 中的 HOST_OPERATING_SYSTEM 来自哪里?
- java - “类加载器创建的对象的方法和构造函数可能引用其他类”是什么意思?
- sql - 需要列值分散在多个列中
- reactjs - nivo.rocks 绘制图表不正确,线条不对应 XY
- python - VS Code 无法在 Anaconda 环境之间正确切换
- java - 编辑文本中的函数“if”
- kotlin - fx 块内的 IO 调度程序 VS KotlinX 调度程序
- javascript - React 的虚拟 DOM
- c# - 在 MSTest 中处理 Excel 复杂数据时需要帮助
- c# - 如何将 .NET Core 项目编译为“任何 CPU”架构?