解析AWS SE中contenttype=application/zip和base64编码的文本文件

2024-09-29 21:40:04 发布

您现在位置:Python中文网/ 问答频道 /正文

在amazonses上,我有一个规则,可以将收到的电子邮件保存到S3存储桶中。Amazon以MIME格式保存这些文件。在

这些电子邮件的附件中有一个.txt,它将在MIME文件中显示为content-type=text/plainContent-Disposition=attachment ... .txt,和{}或{}。在

我可以使用python很好地解析它。在

.txt文件附件被压缩时(即content-type: applcation/zip)解码时,我遇到了一个问题,好像编码不是base64。在

我的代码:

import base64
s = unicode(base64.b64decode(attachment_content), "utf-8")

引发错误:

^{pr2}$

下面是attachment_content中“base64”字符串的前几行,顺便说一句,末尾的长度为53683+“=”,我认为base64的长度应该是4(?)的倍数。 所以也许解码失败是因为压缩正在改变attachment_content,而我在解码之前/之后还需要一些其他的操作?我真的不知道。。在

UEsDBBQAAAAIAM9Ah0otgkpwx5oAADMTAgAJAAAAX2NoYXQudHh0tL3bjiRJkiX23sD+g0U3iOxu
REWGu8c1l2Ag8lKd0V2ZWajM3kLuC6Hubu5uFeZm3nYJL6+n4T4Ry8EOdwCSMyQXBRBLgMQ+7CP5
QPBj5gdYn0CRI6JqFxWv7hlyszursiJV1G6qonI5cmQyeT6dPp9cnCaT6Yvp5Yvz6xfJe7cp8P/k
1SbL8xfJu0OSvUvr2q3TOnFVWjxrknWZFeuk2VRlu978s19MRvNMrHneOv51SOZlGUtMLYnfp0nd

...

我也试过用“拉丁语-1”,但总是胡言乱语。在


Tags: 文件txtamazon附件attachments3规则电子邮件
1条回答
网友
1楼 · 发布于 2024-09-29 21:40:04

问题是,在转换之后,我处理的是一个压缩文件,格式像“PK \x03 \x04 \X3C \Xa \x0c ...”,在将其转换为UTF-8unicode之前,我需要解压缩它。在

这个代码对我有用:

import email

# Parse results from email
received_email = email.message_from_string(email_text)
for part in received_email.walk():
    c_type = part.get_content_type()
    c_enco = part.get('Content-Transfer-Encoding')

    attachment_content = part.get_payload()

    if c_enco == 'base64':
        import base64
        decoded_file = base64.b64decode(attachment_content)
        print("File decoded from base64")

        if c_type == "application/zip":
            from cStringIO import StringIO
            import zipfile
            zfp = zipfile.ZipFile(StringIO(decoded_file), "r")
            unzipped_list = zfp.open(zfp.namelist()[0]).readlines()
            decoded_file = "".join(unzipped_list)
            print('And un-zipped')

    result = unicode(decoded_file, "utf-8")

相关问题 更多 >

    热门问题