如何读取存储在S3存储桶中的Amazon Workmail邮件文件
问题根因
你当前存入S3的文件本身是标准的RFC822格式EML邮件,无法打开的核心原因是两个:
- 生成S3文件Key时仅使用了随机UUID,没有添加
.eml格式后缀,系统无法识别文件类型 - 上传时未指定正确的Content-Type元数据,S3默认会标记为二进制流文件,无法直接预览或打开
解决方法
一、修改代码适配后续新上传的邮件
- 给S3文件Key添加
.eml后缀
将原有代码中key = str(uuid.uuid4())修改为:
修改后下载的文件自带邮件格式标识,直接用任意邮件客户端(Outlook、Thunderbird、系统自带邮件应用等)即可打开读取内容。key = f"{uuid.uuid4()}.eml" - 上传时指定正确的邮件格式Content-Type
调整s3.put_object调用参数,新增ContentType字段:
配置后S3会正确标记文件格式,支持直接在控制台预览内容。s3.put_object( Body=parsed_msg.as_bytes(), Bucket=updated_email_bucket_name, Key=key, ContentType='message/rfc822' )
二、处理已存入S3的存量邮件文件
- 批量重命名现有文件:遍历存储桶内的邮件文件,给所有无后缀的文件统一添加
.eml后缀,重命名后即可正常打开 - 批量更新元数据:如果需要支持S3控制台预览,可以调用S3的
copy_object接口,批量更新存量文件的Content-Type为message/rfc822即可
三、可选:直接存储为可读纯文本
如果不需要保留原始邮件格式,可在代码中直接解析parsed_msg对象,提取发件人、收件人、主题、正文、附件列表等信息拼接为纯文本,将Key后缀改为.txt、上传ContentType设为text/plain,下载后直接用任意文本编辑器即可打开。
内容的提问来源于stack exchange,提问作者Marcu
相关产品推荐
相关产品推荐

