Как получить читаемое электронное письмо от AWS S3 после того, как оно сохранено там как объект? - PullRequest
0 голосов
/ 06 ноября 2019

Я настроил SES для получения сообщений электронной почты на моем домене, а затем сохранял их на S3. Я запускаю уведомление SNS, когда приходит новое электронное письмо, которое запускает лямбду для обработки содержимого внутри электронного письма. Однако все работает, как и ожидалось, я не могу получить какие-либо разумные данные из писем, которые я получаю с 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? Что еще более важно, я делаю это правильно? Спасибо!

1 Ответ

1 голос
/ 06 ноября 2019

Да, вам нужен синтаксический анализатор.

Amazon SES будет хранить входящие электронные письма в формате S3 в формате RFC822 , что означает точно по мере их получения с провода. Это по определению простой текст, независимо от того, насколько сложным является электронное письмо, даже если оно имеет вложения. Где-то внутри этой части текста RFC822 может быть или не быть некоторый HTML в теле. Тело электронной почты может быть только обычным текстом, это может быть HTML (наиболее распространенный) или оба.

Вам необходимо использовать библиотеку, которая может анализировать RFC822. Их довольно много. Какой из них использовать, будет зависеть от вашего выбора языка. Вам также необходимо ознакомиться с анатомией электронного почтового сообщения, то есть RFC822. Вы найдете множество информации об этом с небольшим количеством поиска в Google. Предложение: Ваш собственный почтовый клиент, скорее всего, может сохранить электронную почту в формате RFC822, а затем вы можете использовать это в качестве примера того, как электронная почта действительно выглядит в «родном» формате. Просто посмотрите на это в своем любимом текстовом средстве просмотра.

Ваш вопрос может быть перефразирован в вопрос разбора RFC822. Некоторые люди называют такие файлы .eml файлами. То же самое.

Удачной охоты.

...