首页 > 解决方案 > 将 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。

标签: aws-lambdaamazon-dynamodbamazon-snsamazon-ses

解决方案


推荐阅读