当前位置: 首页 > 知识库问答 >
问题:

AWS SES S3处理入站电子邮件

咸疏珂
2023-03-14

我正在开发一个基于AWS SES的电子邮件发布系统。对于所有收到的电子邮件,我都将路由设置为将消息保存在S3存储桶中,以便异步处理它们。我遇到的问题是,消息以原始格式保存在S3存储桶中:标题、电子邮件正文等,以及加密的附件(一个巨大的字符串)——全部保存在一个文件中。

有没有办法将电子邮件从附件中分离出来,并将其保存在AWS SES级别的单独文件中?我试图直接从AWS获取所需格式的数据,并避免在流程中添加另一个处理步骤。

如果AWS SES不提供这样的功能,那么处理这些消息以获得上述结果的正确方法是什么?

共有3个答案

罗鸿畴
2023-03-14

关于如何编写Lambda的问题。这是我们兰姆达的一部分。它的主要功能是parseEvent函数。和数据。事件将为您提供详细信息的记录[0]

exports.handler = function(event, context, callback) {

    var AWS = require('aws-sdk');

    // Validate characteristics of a SES event record.
    if (!event ||
      !event.hasOwnProperty('Records') ||
      event.Records.length !== 1 ||
      event.Records[0].hasOwnProperty('eventSource') ||
      event.Records[0].eventSource !== 'aws:ses' ||
      event.Records[0].eventVersion !== '1.0') {
      callback(null, {'disposition':'STOP_RULE_SET'});      
    }

    email = data.event.Records[0].ses.mail;
    subjectLine = event.Records[0].ses.mail.commonHeaders.subject;
}

关键是事件。记录[0]。塞斯。邮政不幸的是,我无法通过谷歌搜索找到它的结构,我相信我以前见过它。

冉弘化
2023-03-14

对于稍后讨论这个问题的人来说,这是从SES调用Lambda函数时得到的JSON结构的链接。

http://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-notifications-examples.html

花了一些时间才找到那一页;-)

从链接上看,Lambda通知如下所示,

{
"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"
    }
}
}
龙德润
2023-03-14

看起来不可能让SES自动为你拆分电子邮件。根据这里的留档:

Amazon SES为您提供未经修改的原始电子邮件,通常采用多用途互联网邮件扩展(MIME)格式。

每当SES向S3发送新的电子邮件文件时,我都会使用S3或SNS触发Lambda函数。Lambda函数可以随心所欲地拆分文件,然后将这些新文件写入另一个S3存储桶。

 类似资料:
  • 我的电子邮件验证有问题。我的错误是“用户为空”,因此它不会发送验证电子邮件,但会在控制台和My console.firebase.google中显示登录uid。com项目显示已注册的电子邮件。我应该更改什么,以便发送电子邮件,并且在用户验证其电子邮件之前不允许访问?我读过文件,但想不出来。提前谢谢你。

  • 我四处搜索,从我可以看出,大多数人只是使用一个SMTP插件为这...但是,我想知道怎么了!:) 几周前,我们开始收到报告说,客户没有收到他们的确认电子邮件,当他们下了订单在我们的商店。这以前工作得很好。这里是真正奇怪的部分,据我所知,它只是当我下了一个订单,处理电子邮件没有发送。我们有两种支付选择,贝宝和克拉纳。两个都有用,我自己也试过。我给自己下了真正的订单,一切都很顺利...除了来自Wooco

  • 我试图创建一个Camel路由,它将并行处理传入的IMAP消息。邮件组件应该将传入的邮件分发到不同的线程(但是每个消息都应该按顺序通过两个处理步骤)。

  • 电子邮件功能是Web框架中最受欢迎的功能。 FuelPHP提供了一个优雅的电子邮件类捆绑为一个包。 它用于发送简单的纯文本电子邮件以及带有多个附件的高级富文本电子邮件。 它支持以下功能 - 纯文本邮件,HTML邮件,附件和内联附件。 配置 (Configuration) 要在应用程序中启用电子邮件功能,我们需要在主配置文件fuel/app/config/config.php中按照以下指定加载电子邮

  • 查看以下,详细了解如何处理与 iPhone 手机配对的 M600 上的电子邮件。 阅读您的 M600 上的电子邮件 如果您在手机上使用电子邮件通知,那么在您收到新邮件时会在您的 M600 看到通知。 阅读电子邮件 轻触通知。 利用您的 M600 回复电子邮件 您可以利用您的手腕表回复邮件。 回复电子邮件 轻触通知查看所有邮件 从屏幕底部向上滑动,查看您可以执行的操作。 轻触 Reply(回复),并

  • Email的历史比Web还要久远,直到现在,Email也是互联网上应用非常广泛的服务。 几乎所有的编程语言都支持发送和接收电子邮件,但是,先等等,在我们开始编写代码之前,有必要搞清楚电子邮件是如何在互联网上运作的。 我们来看看传统邮件是如何运作的。假设你现在在北京,要给一个香港的朋友发一封信,怎么做呢? 首先你得写好信,装进信封,写上地址,贴上邮票,然后就近找个邮局,把信仍进去。 信件会从就近的小