Назад | Перейти на главную страницу

Как я могу обнаружить / обработать электронные письма SES, которые слишком велики для S3?

У меня есть набор правил, который помещает входящие сообщения в S3, а затем вызывает лямбду. Однако, если размер сообщения превышает 30 МБ, сообщение не помещается в S3, и лямбда никогда не вызывается.

Как я могу определить, когда это происходит? В идеале я хотел бы уведомить cloudwatch или вызвать другую лямбду. В настоящее время отправитель также не уведомляется, поэтому эти сообщения не отображаются.

Вы можете настроить правила получения, чтобы отправлять вам уведомления с помощью Amazon SNS. Поскольку вы помещаете объекты в корзину S3 в своем RuleSet, пример уведомления, отправляемого в Amazon SNS, может выглядеть следующим образом:

{
"notificationType": "Received",
"receipt": {
"timestamp": "2015-09-11T20:32:33.936Z",
"processingTimeMillis": 406,
"recipients": [
    "recipient@example.com"
],
"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": [
    "recipient@example.com"
],
"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 recipient@example.com; 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": "sender@example.com"
    },
    {
        "name": "To",
        "value": "recipient@example.com"
    },
    {
        "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": "<61967230-7A45-4A9D-BEC9-87CBCF2211C9@example.com>"
    },
    {
        "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": [
        "sender@example.com"
    ],
    "date": "Fri, 11 Sep 2015 20:32:32 +0000",
    "to": [
        "recipient@example.com"
    ],
    "messageId": "<61967230-7A45-4A9D-BEC9-87CBCF2211C9@example.com>",
    "subject": "Example subject"
}
}
}

Теперь, когда вы отправляете события в тему SNS, у вас может быть функция Lambda, подписанная на вашу тему SNS, которая выполняет следующие действия:

  1. Читает notificationType введите сообщение и остановит выполнение, если значение Received (помогает сэкономить затраты на выполнение Lambda)
  2. Если значение для notificationType что-то еще, функция извлекает значение для from ключ (значение объекта для commonHeaders key и использует SES API для отправки сообщения электронной почты о том, что не было предпринято никаких действий, поскольку размер сообщения электронной почты превышает допустимые пределы вашего приложения [30 МБ]