发送电子邮件后如何检查

问题描述

我正在使用AWS的SES服务发送电子邮件

我使用Python和boto3。 (https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ses.html#SES.Client.send_email

我知道如何检查整体统计信息。 (https://aws.amazon.com/ko/premiumsupport/knowledge-center/ses-email-opens-clicks/

但是我不知道如何进行个人询问。 发送电子邮件后,将返回message_idrequest_id。 我认为我们将使用message_idrequest_id进行搜索。 我不知道该怎么办。

解决方法

  1. Configure SES发送通知(发送,传递,退回,打开)到SNS主题。
  2. 编写Lambda函数以收听SNS主题。收到通知后,将事件写入您的表中(我使用DynamoDB)
  3. 现在您将所有电子邮件事件都放在一个表中

这是我用来将SES事件写入DynamoDB的Lambda函数

const tableName = "DEV_EmailAuditLogs";
const AWS = require("aws-sdk");
AWS.config.update({ region: "us-east-1" });
const dynamodb = new AWS.DynamoDB({ apiVersion: "2012-10-08" });

exports.handler = (event,context,callback) => {
  console.log(JSON.stringify(event,null,2));

  console.log("From SNS:",event.Records[0].Sns.Message);
  console.log("Arn Topic:",event.Records[0].Sns.TopicArn);

  const json = event.Records[0].Sns.Message;
  const parsed = JSON.parse(json);

  const type = parsed.eventType;
  const sent = parsed.mail.timestamp.slice(0,-1);
  let to,subject,from;

  const headers = parsed.mail.headers;

  for (const h of headers) {
    switch (h.name) {
      case "To":
        to = h.value;
        break;
      case "From":
        from = h.value;
        break;
      case "Subject":
        subject = h.value;
        break;
    }
  }

  const eventData = parsed[type.toLowerCase()];
  let created;

  if (eventData && eventData.timestamp) {
    created = eventData.timestamp.slice(0,-1);
  } else {
    created = sent;
  }

  var params = {
    TableName: tableName,Item: {
      to: { S: to },from: { S: from },created: { S: created },sent: { S: sent },type: { S: type },version: { N: "1" }
    }
  };
  
  if (subject){
    params.Item.subject = { S: subject };
  }

  dynamodb.putItem(params,function(err,data) {
    if (err) {
      console.log(err);
    } else {
      console.log(data);
    }
  });
};