我如何检测/处理对于 S3 来说太大的 SES 电子邮件?

我如何检测/处理对于 S3 来说太大的 SES 电子邮件?

我有一个规则集,它将传入的消息放入 S3,然后调用 lambda。但是,如果消息大于 30MB,则不会将消息放入 S3,并且永远不会调用 lambda。

我如何检测这种情况发生的时间?理想情况下,我想通知 cloudwatch,或调用另一个 lambda。目前,发送者也没有收到通知,因此这些消息会默默失败。

答案1

您可以配置接收规则以使用 Amazon SNS 向您发送通知。由于您将对象放在规则集中的 S3 存储桶内,因此发送到 Amazon SNS 的通知示例可能如下所示:

{
"notificationType": "Received",
"receipt": {
"timestamp": "2015-09-11T20:32:33.936Z",
"processingTimeMillis": 406,
"recipients": [
    "[email protected]"
],
"spamVerdict": {
    "status": "PASS"
},
"virusVerdict": {
    "status": "PASS"
},
"spfVerdict": {
    "status": "PASS"
},
"dkimVerdict": {
    "status": "PASS"
},
"action": {
    "type": "S3",
    "topicArn": "arn:aws:sns:us-east-1:012345678912:example-topic",
    "bucketName": "my-S3-bucket",
    "objectKey": "\email"
}
},
"mail": {
"timestamp": "2015-09-11T20:32:33.936Z",
"source": "0000014fbe1c09cf-7cb9f704-7531-4e53-89a1-5fa9744f5eb6-000000@amazonses.com",
"messageId": "d6iitobk75ur44p8kdnnp7g2n800",
"destination": [
    "[email protected]"
],
"headersTruncated": false,
"headers": [
    {
        "name": "Return-Path",
        "value": "<0000014fbe1c09cf-7cb9f704-7531-4e53-89a1-5fa9744f5eb6-000000@amazonses.com>"
    },
    {
        "name": "Received",
        "value": "from a9-183.smtp-out.amazonses.com (a9-183.smtp-out.amazonses.com [54.240.9.183]) by inbound-smtp.us-east-1.amazonaws.com with SMTP id d6iitobk75ur44p8kdnnp7g2n800 for [email protected]; Fri, 11 Sep 2015 20:32:33 +0000 (UTC)"
    },
    {
        "name": "DKIM-Signature",
        "value": "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=ug7nbtf4gccmlpwj322ax3p6ow6yfsug; d=amazonses.com; t=1442003552; h=From:To:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Date:Message-ID:Feedback-ID; bh=DWr3IOmYWoXCA9ARqGC/UaODfghffiwFNRIb2Mckyt4=; b=p4ukUDSFqhqiub+zPR0DW1kp7oJZakrzupr6LBe6sUuvqpBkig56UzUwc29rFbJF hlX3Ov7DeYVNoN38stqwsF8ivcajXpQsXRC1cW9z8x875J041rClAjV7EGbLmudVpPX 4hHst1XPyX5wmgdHIhmUuh8oZKpVqGi6bHGzzf7g="
    },
    {
        "name": "From",
        "value": "[email protected]"
    },
    {
        "name": "To",
        "value": "[email protected]"
    },
    {
        "name": "Subject",
        "value": "Example subject"
    },
    {
        "name": "MIME-Version",
        "value": "1.0"
    },
    {
        "name": "Content-Type",
        "value": "text/plain; charset=UTF-8"
    },
    {
        "name": "Content-Transfer-Encoding",
        "value": "7bit"
    },
    {
        "name": "Date",
        "value": "Fri, 11 Sep 2015 20:32:32 +0000"
    },
    {
        "name": "Message-ID",
        "value": "<[email protected]>"
    },
    {
        "name": "X-SES-Outgoing",
        "value": "2015.09.11-54.240.9.183"
    },
    {
        "name": "Feedback-ID",
        "value": "1.us-east-1.Krv2FKpFdWV+KUYw3Qd6wcpPJ4Sv/pOPpEPSHn2u2o4=:AmazonSES"
    }
],
"commonHeaders": {
    "returnPath": "0000014fbe1c09cf-7cb9f704-7531-4e53-89a1-5fa9744f5eb6-000000@amazonses.com",
    "from": [
        "[email protected]"
    ],
    "date": "Fri, 11 Sep 2015 20:32:32 +0000",
    "to": [
        "[email protected]"
    ],
    "messageId": "<[email protected]>",
    "subject": "Example subject"
}
}
}

现在您正在将事件推送到 SNS 主题,您可以让 Lambda 函数订阅您的 SNS 主题,并执行以下操作:

  1. 读取notificationType消息中的键,如果值是则停止执行Received(有助于节省 Lambda 执行成本)
  2. 如果值为notificationType其他值,则该函数将检索键的值from(键的对象值)commonHeaders,并使用 SES API 发送一封电子邮件,说明由于电子邮件大小超出了应用程序允许的限制 [30 mb],因此未采取任何措施

相关内容