高级AWS解决方案设计:
HTML格式化邮件 - > AWS SES - >入境收据规则 - > S3和SNS - > Lambda函数。
想法是Lambda将采用SNS通知并使用S3存储桶详细信息删除部分 - 从S3获取文件并使用mail-parser模块解析它。
我有一个简单的测试用例,它使用从未在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 /解码问题但我无法找到它的位置 一段时间以来一直困惑于此,我无法完全理解这个问题!