Ale*_*ont 6 python google-api-python-client gmail-api
我正在使用官方 Google 教程连接到 Gmail 地址并使用Gmail API从电子邮件下载附件。
给出的示例代码是这样的:
try:
message = service.users().messages().get(userId=user_id, id=msg_id).execute()
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()
except errors.HttpError, error:
print 'An error occurred: %s' % error
Run Code Online (Sandbox Code Playgroud)
我系统地得到一个KeyError:'数据'。
当我打印“零件”对象时,我得到了这个。我检查了所有电子邮件都包含附件,我看到“正文”键有“attachmentId”和“size”字段,但没有“数据”字段。
{'partId': '1',
'mimeType': 'application/x-zip-compressed',
'filename': 'Statement.zip',
'headers': [{'name': 'Content-Type', 'value': 'application/x-zip-compressed; name="Statement.zip"'},
{'name': 'Content-Description', 'value': 'Statement.zip'},
{'name': 'Content-Disposition', 'value': 'attachment; filename="Statement.zip"; size=317; creation-date="Fri, 05 Oct 2018 11:00:24 GMT"; modification-date="Fri, 05 Oct 2018 11:00:24 GMT"'},
{'name': 'Content-Transfer-Encoding', 'value': 'base64'}],
'body': {'attachmentId': 'ANGjdJ8Jsk95qxfAezayex3yDktM9hnMSwsy_LD4aqu3h2lhum36MT7pG9aqyWpX7VmNoxZISLAFfKyBy0gGgL5WyL5f7zrH4bRd_MBsHtGxXBfN6XBCg_qHkRu0ZVRaOtuYTCc8_aN4NMsaApGI19KJlfgVXV3w67gEspZ61OKZZwbt386wbA-_6GrAcQCGIgk4dFGxc_Zp5EjqIbsA557KOjEFoO0A9urMXIQvQXF0GRdhfHb287ZfhjKYGVpukhVxT6wDNjL47Ifc7VmG_kcgeUxpfKEGO6tmVw2PzuG4RlAdX5S7yjgGlEHGVmPgnTl-rjT7asZnia68cBg_5ATSJ9FS64OKcr79s8MQD-DL0omXLJjfw5-qIOUKM4x56btte572j5SO7afAYrsv',
'size': 317}}
Run Code Online (Sandbox Code Playgroud)
所以我没有得到与 Google 官方文档相同的内容。我错过了什么吗?如何下载附件?
找到了一种不同的语法:
try:
message = service.users().messages().get(userId=user_id, id=msg_id).execute()
for part in message['payload']['parts']:
if part['filename']:
attachment = service.users().messages().attachments().get(userId='me', messageId=message['id'], id=part['body']['attachmentId']).execute()
file_data = base64.urlsafe_b64decode(attachment['data'].encode('UTF-8'))
path = ''.join([store_dir, part['filename']])
f = open(path, 'wb')
f.write(file_data)
f.close()
except errors.HttpError as error:
print(f'An error occurred: {error}')
Run Code Online (Sandbox Code Playgroud)
在第七行,您使用part['body']['data']. 但是,在您打印的部分中,'body'没有\xe2\x80\x99t 有密钥'data'。它只有'attachmentId'和'size'。
| 归档时间: |
|
| 查看次数: |
1346 次 |
| 最近记录: |