高级AWS解决方案设计:
HTML格式的邮件-> AWS SES->入站接收规则-> S3和SNS-> Lambda函数。
[Lambda会采用SNS通知并删除带有S3存储桶详细信息的零件的想法-从S3中获取文件并使用邮件解析器模块对其进行解析。
我有一个简单的测试用例,它使用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]
这感觉像是unicode /解码问题,但我找不到它可能在哪里一直对此感到困惑,我不能完全解决这个问题!
我遇到同样的问题。实际上,我将其追溯到我的Web客户端,该客户端剥离了\ r \ n。