Проект решения высокого уровня AWS:
Почта в формате HTML -> AWS SES -> Правило входящей квитанции -> S3 и SNS -> Лямбда-функция.
Идея заключается в том, что Lambda будет приниматьУведомление SNS и зачистите деталь с деталями корзины S3 - возьмите файл с S3 и проанализируйте его с помощью модуля mail-parser.
У меня есть простой тестовый пример, который разбил часть этого с помощьюmail, которого никогда не было в S3 для проверки компонента синтаксического анализа почты.
Выделение одной конкретной части письма в качестве примера: -
Перед анализом просмотр источника в почтовом клиенте выглядит следующим образом: -
<tr class="dataElementContainer">
<td class="dataLabelContainer">Description</td>
<td class="dataValueContainer">Text</td>
</tr>
Когда изначальнозакодировано это будет читать почту из файла и анализировать ее.
Вывод будет в формате: -
\n\rDescription Text\n\r
При запуске другого теста, но на этот раз отправка почты в SES и извлечениеполезная нагрузка от S3 после того, как она проанализирована, заканчивается в следующем формате: -
\n\rDescription \r\n\r\nText\n\r
Я мог бы проверить это, но я хотел бы понять, что происходит.
\ r \ nЭто возврат каретки Windows и перевод строки.
Упрощенный код, который получает объект S3
import boto3
import botocore
self.s3client = boto3.client('s3')
obj = self.s3client.get_object(Bucket=bucket_id,Key=key_id)
Упрощенный код, который анализирует почту: -
import mailparser
import regex
mp = MailParser()
parsed_mail = mp.parse_from_string(obj)
plain_text_body = parsed_mail.text_plain[0]
Это похоже напроблема с юникодом / расшифровкой, но я не могу выяснить, где это может быть. Я какое-то время ломал голову над этим вопросом, и я не могу понять, в чем проблема!