wya*_*ang 2 python gmail gmail-api
我尝试使用新的 Gmail api 从特定的电子邮件消息部分下载图像附件。(https://developers.google.com/gmail/api/v1/reference/users/messages/attachments#resource)。
消息部分是:
{u'mimeType': u'image/png', u'headers': {u'Content-Transfer-Encoding': [u'base64'], u'Content-Type': [u'image/png; name="Screen Shot 2014-03-11 at 11.52.53 PM.png"'], u'Content-Disposition': [u'attachment; filename="Screen Shot 2014-03-11 at 11.52.53 PM.png"'], u'X-Attachment-Id': [u'f_hso95l860']}, u'body': {u'attachmentId': u '', u'size': 266378}, u'partId': u'1', u'filename': u'Screen Shot 2014-03-11 at 11.52.53 PM.png'}
Users.messages.attachments 的 GET 响应是:
{“数据”:“”,“大小”:194659 }
当我在 Python 中解码数据时,如下所示:
decoded_data1 = base64.b64decode(resp["data"])
decoded_data2 = email.utils._bdecode(resp["data"]) # email, the standard module
with open("image1.png", "w") as f:
f.write(decoded_data1)
with open("image2.png", "w") as f:
f.write(decoded_data2)
Run Code Online (Sandbox Code Playgroud)
文件 image1.png 和 image2.png 的大小均为 188511,它们是无效的 png 文件,因为我无法在图像查看器中打开它们。我是否没有为 MIME 正文使用正确的 base64 解码?
唔。Gmail API 看起来与标准 Pythonemail模块有点不同,但我确实找到了一个如何下载和存储附件的示例:
https://developers.google.com/gmail/api/v1/reference/users/messages/attachments/get#examples
for part in message['payload']['parts']:
if part['filename']:
file_data = base64.urlsafe_b64decode(part['body']['data']
.encode('UTF-8'))
path = ''.join([store_dir, part['filename']])
f = open(path, 'w')
f.write(file_data)
f.close()
Run Code Online (Sandbox Code Playgroud)