将电子邮件作为对象存储在那里后,如何从 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 =
<<a href=3D"mailto:rahul.patil@name.com">rahul.patil@name.com<=
/a>> 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 <<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
文件。一样的。
狩猎愉快
我已将 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 =
<<a href=3D"mailto:rahul.patil@name.com">rahul.patil@name.com<=
/a>> 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 <<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
文件。一样的。
狩猎愉快