将电子邮件作为对象存储在那里后,如何从 AWS S3 获取可读的电子邮件?

How to get a readable email from AWS S3 after it's stored there as an object?

我已将 SES 设置为在我的域中接收电子邮件,然后将电子邮件存储到 S3。当一封新电子邮件到达时,我会触发 SNS 通知,这会触发 lambda 对电子邮件中的内容进行处理。一切都按预期工作,但是,我无法从从 S3 获取的电子邮件中获取任何有意义的数据。例如,从电子邮件的 S3 中获取一个对象会给我以下数据:

 <div dir=3D"ltr">ssadsadasdasdas</div><br><div class=3D"gmail_quote"><div d=
ir=3D"ltr" class=3D"gmail_attr">On Tue, Nov 5, 2019 at 5:30 PM Rahul Patil =
&lt;<a href=3D"mailto:rahul.patil@name.com">rahul.patil@name.com<=
/a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0=
px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><=
div dir=3D"ltr">asdsadasdasdasd</div><br><div class=3D"gmail_quote"><div di=
r=3D"ltr" class=3D"gmail_attr">On Tue, Nov 5, 2019 at 5:27 PM &lt;<a href=
=3D"mailto:rahul@name.com" target=3D"_blank">rahul@name.com</a>&g=
t; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0p=
x 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Body<b=
r>

获取数据的代码

const obj = await s3.getObject(getObjectParams).promise();
      console.log(obj);
      let objectData = obj.Body.toString("utf-8");
      console.log(objectData)

我不需要那么多 HTML,只要发件人的电子邮件和正文就足够了。有没有内置的方法可以过滤所需的数据?任何可以插入 lamba 中的节点电子邮件解析器模块?更重要的是,我这样做的方式正确吗?谢谢!

是的,你需要一个解析器。

Amazon SES 将以 RFC822 格式在 S3 中存储传入的电子邮件,这意味着 完全 从电汇收到的电子邮件。根据定义,这是纯文本,无论电子邮件多么复杂,即使它有附件。在 RFC822 文本的某个地方,正文中可能有也可能没有 HTML。电子邮件的正文只能是纯文本,可以是 HTML(最常见),也可以是两者。

您需要使用可以解析 RFC822 的库。其中有很多。使用哪一个取决于您的语言选择。您还需要熟悉 Internet 电子邮件的结构,即 RFC822。通过一些谷歌搜索,您会发现大量相关信息。建议:您自己的电子邮件客户端很可能会以 RFC822 格式保存电子邮件,然后您可以将其用作 'native' 格式电子邮件的真实示例。只需在您最喜欢的文本查看器中查看即可。

您的问题可以改写为 RFC822 解析问题。有些人将此类文件称为 .eml 文件。一样的。

狩猎愉快