Google 的 Gmail API Python 下载附件

Google's Gmail API Python download attachments

我正在尝试使用 Google 的 API-s 下载电子邮件附件,但在此过程中,我遇到了一些有趣的错误:

使用 Google 的示例 (from here) 作为 users.messages.attachments: get method ,我有一个 KeyError 说没有 [=17= 这样的关键字].

使用 Download Attachments from gmail using Gmail API 中提出的方法,TypeError: 'Resource' object is not callable 在以下行引发:

att=gmail_service.users().messages().attachments().get(userId=user_id, messageId=msg_id,id=att_id).execute()

我的代码的相关部分是:

import codecs

message =  gmail_service.users().threads().get(id=thread['id'],userId='me',format='metadata').execute()['messages']
themessage = gmail_service.users().messages().get(userId='me', id=message[0]['id']).execute()
attachmentid = themessage['payload']['parts'][1]['body']['attachmentId'].encode('utf-8')
attachment = gmail_service().users().messages().attachments().get(userId='me',messageId=message[0]['id'], id=attachmentid).execute()

非常感谢您,对于违反任何约定,我们深表歉意。我是业余程序员,我的专业连CS都没有。

以及电子邮件的原始信息:

{u'historyId': u'87616', u'id': u'14cc2903d8201ce5', u'snippet': u'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas dapibus leo auctor vulputate', u'sizeEstimate': 12503, u'threadId': u'14cc2903d8201ce5', u'labelIds': [u'INBOX', u'IMPORTANT', u'CATEGORY_PERSONAL', u'UNREAD'], u'payload': {u'mimeType': u'multipart/mixed', u'headers': [{u'name': u'Delivered-To', u'value': u'nagytomi1992@gmail.com'}, {u'name': u'Received', u'value': u'by 10.27.172.12 with SMTP id v12csp3301331wle;        Thu, 16 Apr 2015 07:09:35 -0700 (PDT)'}, {u'name': u'X-Received', u'value': u'by 10.194.47.165 with SMTP id e5mr59439281wjn.128.1429193375163;        Thu, 16 Apr 2015 07:09:35 -0700 (PDT)'}, {u'name': u'Return-Path', u'value': u'<nghuytungi@windowslive.com>'}, {u'name': u'Received', u'value': u'from DUB004-OMC2S3.hotmail.com (dub004-omc2s3.hotmail.com. [157.55.1.142])        by mx.google.com with ESMTPS id k8si15998291wia.75.2015.04.16.07.09.35        for <nagytomi1992@gmail.com>        (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);        Thu, 16 Apr 2015 07:09:35 -0700 (PDT)'}, {u'name': u'Received-SPF', u'value': u'pass (google.com: domain of nghuytungi@windowslive.com designates 157.55.1.142 as permitted sender) client-ip=157.55.1.142;'}, {u'name': u'Authentication-Results', u'value': u'mx.google.com;       spf=pass (google.com: domain of nghuytungi@windowslive.com designates 157.55.1.142 as permitted sender) smtp.mail=nghuytungi@windowslive.com'}, {u'name': u'Received', u'value': u'from DUB122-W21 ([157.55.1.137]) by DUB004-OMC2S3.hotmail.com over TLS secured channel with Microsoft SMTPSVC(7.5.7601.22751);\t Thu, 16 Apr 2015 07:09:34 -0700'}, {u'name': u'X-TMN', u'value': u'[u8z/PkebpkoUTRJcKA0Traso7CgFYEaU5ZPsEYJzyy0=]'}, {u'name': u'X-Originating-Email', u'value': u'[nghuytungi@windowslive.com]'}, {u'name': u'Message-ID', u'value': u'<DUB122-W210C6AC460DD3A13E54414D0E40@phx.gbl>'}, {u'name': u'Return-Path', u'value': u'nghuytungi@windowslive.com'}, {u'name': u'Content-Type', u'value': u'multipart/mixed; boundary="_7a3a4cda-38d8-405f-985d-255abada5722_"'}, {u'name': u'From', u'value': u'Tung Nguyen Huy <nghuytungi@windowslive.com>'}, {u'name': u'To', u'value': u'"nagytomi1992@gmail.com" <nagytomi1992@gmail.com>'}, {u'name': u'Subject', u'value': u'Chicago'}, {u'name': u'Date', u'value': u'Thu, 16 Apr 2015 16:09:34 +0200'}, {u'name': u'Importance', u'value': u'Normal'}, {u'name': u'MIME-Version', u'value': u'1.0'}, {u'name': u'X-OriginalArrivalTime', u'value': u'16 Apr 2015 14:09:34.0855 (UTC) FILETIME=[F77AD970:01D0784E]'}],
u'parts': [{u'mimeType': u'multipart/alternative', u'headers': [{u'name': u'Content-Type', u'value': u'multipart/alternative; boundary="_2c3faa5d-3517-45ad-9ae0-82a26eb7b6e5_"'}], u'parts': [{u'mimeType': u'text/plain', u'headers': [{u'name': u'Content-Type', u'value': u'text/plain; charset="iso-8859-1"'}, {u'name': u'Content-Transfer-Encoding', u'value': u'quoted-printable'}], u'body': {u'data': u'TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gTWFlY2VuYXMgZGFwaWJ1cyBsZW8gYXVjdG9yIHZ1bHB1dGF0ZSBzb2RhbGVzLiBOdWxsYSBjb25ndWUgYXVndWUgdmVsIGRpZ25pc3NpbSBjb25zZXF1YXQuIFNlZCBzb2xsaWNpdHVkaW4gZmV1Z2lhdCBsaWd1bGEsIHZpdGFlIHNvbGxpY2l0dWRpbiBlcm9zIHRlbXB1cyBpZC4gTnVsbGEgZWZmaWNpdHVyIG1hZ25hIHB1bHZpbmFyIHZ1bHB1dGF0ZSBwdWx2aW5hci4gTnVsbGFtIHBoYXJldHJhIGV1aXNtb2Qgb3JjaS4gRnVzY2UgbW9sbGlzLCBleCBhIGZpbmlidXMgZWxlaWZlbmQsIGVuaW0gZW5pbSB2ZWhpY3VsYSBvZGlvLCBhIG1hdHRpcyBkaWFtIG1hZ25hIHF1aXMgbGVvLiBQcmFlc2VudCBub24gbmVxdWUgdmVzdGlidWx1bSwgcmhvbmN1cyBudWxsYSBzZWQsIGhlbmRyZXJpdCBsZW8uIFNlZCB0aW5jaWR1bnQgbGVvIGlkIG1hc3NhIGVsZWlmZW5kLCBlZ2V0IGNvbmRpbWVudHVtIGRvbG9yIGludGVyZHVtLlZpdmFtdXMgYXQgaGVuZHJlcml0IGRpYW0uIEFlbmVhbiBpbnRlcmR1bSBjb25zZXF1YXQgcG9ydGEuIE5hbSBhIGF1Z3VlIHNlZCBpcHN1bSB2ZXN0aWJ1bHVtIHByZXRpdW0gcXVpcyBpZCBkdWkuIEFlbmVhbiBpZCByaXN1cyBlbmltLiBEdWlzIHRlbXB1cyBlcm9zIGdyYXZpZGEsIHZlbmVuYXRpcyBtYXNzYSBwb3J0dGl0b3IsIHRlbXBvciB0ZWxsdXMuIEV0aWFtIGNvbnNlcXVhdCBsaWJlcm8gc2l0IGFtZXQgb2RpbyB2dWxwdXRhdGUsIGV1IGVnZXN0YXMgbGlndWxhIHBlbGxlbnRlc3F1ZS4gRHVpcyB1cm5hIHRlbGx1cywgcHJldGl1bSBub24gZXVpc21vZCBub24sIHZpdmVycmEgZWdldCBkdWkuIEFsaXF1YW0gZXQgZXggbWV0dXMuIEluIGV4IGxvcmVtLCBmaW5pYnVzIGlkIHZvbHV0cGF0IGluLCBsb2JvcnRpcyB2ZWwgb3JjaS4gVXQgdnVscHV0YXRlIGx1Y3R1cyBwdXJ1cyBub24gdmVoaWN1bGEuIFByYWVzZW50IG1hZ25hIHNhcGllbiwgc29sbGljaXR1ZGluIG5lYyBtYXNzYSBhYywgcnV0cnVtIGF1Y3RvciBhdWd1ZS4gU2VkIGVzdCBudW5jLCBjb21tb2RvIGhlbmRyZXJpdCBmYWNpbGlzaXMgYWMsIG1vbGVzdGllIGRpZ25pc3NpbSBhcmN1LiBOdWxsYW0gdmVsIGVyb3MgbmVxdWUuIEFsaXF1YW0gZnJpbmdpbGxhIHZlbmVuYXRpcyBlcm9zLCB2ZWwgcGVsbGVudGVzcXVlIG1pIGNvbmd1ZSBzZWQuDQpRdWlzcXVlIGNvbnNlcXVhdCBmYXVjaWJ1cyBlc3QsIGV1IGVmZmljaXR1ciBhdWd1ZSB2aXZlcnJhIGJpYmVuZHVtLiBDcmFzIHZhcml1cyBtb2xlc3RpZSBzYXBpZW4gdXQgdmFyaXVzLiBBZW5lYW4gdml0YWUgcHVydXMgdXJuYS4gRXRpYW0gY29uc2VjdGV0dXIgZXVpc21vZCBsZWN0dXMgc2VkIG1heGltdXMuIE51bmMgbmVjIHRlbGx1cyBkdWkuIFBlbGxlbnRlc3F1ZSBtYWxlc3VhZGEsIGlwc3VtIG5vbiB2ZWhpY3VsYSB1bGxhbWNvcnBlciwgbmliaCBmZWxpcyBmYWNpbGlzaXMgYXVndWUsIGlkIHZlbmVuYXRpcyBtYXNzYSBuaXNsIGluIGZlbGlzLiBGdXNjZSBhbGlxdWFtIGNvbnZhbGxpcyBmZXJtZW50dW0uIEluIG1hbGVzdWFkYSwgYW50ZSB2ZWwgbWFsZXN1YWRhIHNjZWxlcmlzcXVlLCBuZXF1ZSBlcmF0IG1hdHRpcyBtYWduYSwgbm9uIGZhY2lsaXNpcyBtYXVyaXMgdGVsbHVzIG5vbiBlcm9zLiBBZW5lYW4gdml0YWUgZXJvcyBsdWN0dXMgbGlndWxhIHZpdmVycmEgZmluaWJ1cyBub24gcXVpcyBlc3QuIFNlZCBldCBjb25ndWUgc2VtLCB2b2x1dHBhdCBtb2xlc3RpZSBvZGlvLiBOYW0gZXJhdCBzYXBpZW4sIGZpbmlidXMgdmVsIHZvbHV0cGF0IHZlbCwgcG9zdWVyZSBpZCBlbGl0LiBOdWxsYW0gZnJpbmdpbGxhLCBtYXVyaXMgbmVjIHNhZ2l0dGlzIGVmZmljaXR1ciwgbG9yZW0gdXJuYSBtb2xlc3RpZSB0ZWxsdXMsIG5vbiBiaWJlbmR1bSBvcmNpIGlwc3VtIHV0IHF1YW0uIE1hdXJpcyBxdWlzIGxvcmVtIHNvZGFsZXMsIHBoYXJldHJhIHNlbSBpbiwgbW9sZXN0aWUgdG9ydG9yLg0KRG9uZWMgYXQgYXJjdSBzYWdpdHRpcywgcHVsdmluYXIgbGFjdXMgYWMsIHZlbmVuYXRpcyBtaS4gSW4gaGFjIGhhYml0YXNzZSBwbGF0ZWEgZGljdHVtc3QuIFF1aXNxdWUgcGhhcmV0cmEgZHVpIGFjIHBvc3VlcmUgbGFjaW5pYS4gRHVpcyBzY2VsZXJpc3F1ZSBwaGFyZXRyYSB1cm5hLCB1dCB1bHRyaWNlcyB2ZWxpdCB1bHRyaWNpZXMgaW4uIFByYWVzZW50IHZhcml1cyBlc3QgYWMgY29uZ3VlIGxvYm9ydGlzLiBNYWVjZW5hcyBpbXBlcmRpZXQgbW9sZXN0aWUgcHVydXMsIGEgZWZmaWNpdHVyIGRvbG9yIHZvbHV0cGF0IHZlbC4gRG9uZWMgdmVsaXQganVzdG8sIGZhY2lsaXNpcyBlZ2V0IGV4IHNpdCBhbWV0LCBiaWJlbmR1bSBhY2N1bXNhbiBuaXNsLiBJbiBpbiBsaWd1bGEgaWQgZGlhbSBsYWNpbmlhIGx1Y3R1cyB2aXRhZSBxdWlzIHZlbGl0LiBDcmFzIGFsaXF1YW0gZGlhbSB2aXRhZSBlcm9zIGZlcm1lbnR1bSBibGFuZGl0LiBBZW5lYW4gYXQgcmhvbmN1cyBvZGlvLiBTZWQgdWx0cmljZXMgYmliZW5kdW0gZXJhdCwgYWMgcGxhY2VyYXQgdHVycGlzIHNjZWxlcmlzcXVlIGlkLiBOdW5jIGNvbmRpbWVudHVtIHRvcnRvciBub24gZXN0IGV1aXNtb2QsIGEgbW9sZXN0aWUgbWkgZXVpc21vZC4gUGhhc2VsbHVzIHV0IHZlbGl0IHZlbCBqdXN0byBzY2VsZXJpc3F1ZSBhY2N1bXNhbiB2ZWwgdXQgbmlzbC4gQ3VyYWJpdHVyIGZyaW5naWxsYSBleCB1dCBzYXBpZW4gYWNjdW1zYW4gY29uZ3VlLiBVdCBtb2xsaXMgYXQgbGlndWxhIGVnZXQgZmluaWJ1cy4NClZlc3RpYnVsdW0gZWdlc3RhcyBsYWN1cyBsZW8sIGF0IG1vbGVzdGllIGF1Z3VlIHByZXRpdW0gaWQuIEludGVnZXIgc2NlbGVyaXNxdWUgZWZmaWNpdHVyIG5pc2kgc2l0IGFtZXQgY29uc2VjdGV0dXIuIE51bGxhIHJpc3VzIG1pLCBmZXVnaWF0IGVnZXQgaXBzdW0gYXQsIGZpbmlidXMgdGluY2lkdW50IG1pLiBQcm9pbiB2ZWwgdGVsbHVzIGEgbG9yZW0gc2FnaXR0aXMgbWF4aW11cy4gVXQgdnVscHV0YXRlIGVyYXQgYWxpcXVldCBpcHN1bSBydXRydW0gbGFjaW5pYS4gQ2xhc3MgYXB0ZW50IHRhY2l0aSBzb2Npb3NxdSBhZCBsaXRvcmEgdG9ycXVlbnQgcGVyIGNvbnViaWEgbm9zdHJhLCBwZXIgaW5jZXB0b3MgaGltZW5hZW9zLiBEb25lYyBpZCBtb2xsaXMgc2VtLiBNYWVjZW5hcyBmZXVnaWF0IHJpc3VzIHZlbCBmZXVnaWF0IGVmZmljaXR1ci4gRnVzY2UgYW50ZSB0ZWxsdXMsIGJpYmVuZHVtIGF0IHByZXRpdW0gYXVjdG9yLCBtYXR0aXMgZWdldCBpcHN1bS4gTnVuYyBzYWdpdHRpcyB0b3J0b3IgcXVpcyBhcmN1IHZpdmVycmEsIHZlbCBsb2JvcnRpcyBsYWN1cyBldWlzbW9kLiBRdWlzcXVlIGRpY3R1bSB0ZW1wb3IgYmliZW5kdW0uIFNlZCBtYXhpbXVzIGxpYmVybyBzaXQgYW1ldCBqdXN0byBmcmluZ2lsbGEgdHJpc3RpcXVlLiAJCSAJICAgCQkgIA==', u'size': 3451}, u'partId': u'0.0', u'filename': u''}, {u'mimeType': u'text/html', u'headers': [{u'name': u'Content-Type', u'value': u'text/html; charset="iso-8859-1"'}, {u'name': u'Content-Transfer-Encoding', u'value': u'quoted-printable'}], u'body': {u'data': u'PGh0bWw-DQo8aGVhZD4NCjxzdHlsZT48IS0tDQouaG1tZXNzYWdlIFANCnsNCm1hcmdpbjowcHg7DQpwYWRkaW5nOjBweA0KfQ0KYm9keS5obW1lc3NhZ2UNCnsNCmZvbnQtc2l6ZTogMTJwdDsNCmZvbnQtZmFtaWx5OkNhbGlicmkNCn0NCi0tPjwvc3R5bGU-PC9oZWFkPg0KPGJvZHkgY2xhc3M9J2htbWVzc2FnZSc-PGRpdiBkaXI9J2x0cic-PHAgc3R5bGU9ImNvbG9yOiByZ2IoMzQsIDM0LCAzNCk7IGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMi44MDAwMDAxOTA3MzQ5cHg7IHRleHQtYWxpZ246IGp1c3RpZnk7IG1hcmdpbi1ib3R0b206IDE0cHg7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTsiPjxmb250IGNvbG9yPSIjMDAwMDAwIiBmYWNlPSJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMXB4OyBsaW5lLWhlaWdodDogMTRweDsiPkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nIGVsaXQuIE1hZWNlbmFzIGRhcGlidXMgbGVvIGF1Y3RvciB2dWxwdXRhdGUgc29kYWxlcy4gTnVsbGEgY29uZ3VlIGF1Z3VlIHZlbCBkaWduaXNzaW0gY29uc2VxdWF0LiBTZWQgc29sbGljaXR1ZGluIGZldWdpYXQgbGlndWxhLCB2aXRhZSBzb2xsaWNpdHVkaW4gZXJvcyB0ZW1wdXMgaWQuIE51bGxhIGVmZmljaXR1ciBtYWduYSBwdWx2aW5hciB2dWxwdXRhdGUgcHVsdmluYXIuIE51bGxhbSBwaGFyZXRyYSBldWlzbW9kIG9yY2kuIEZ1c2NlIG1vbGxpcywgZXggYSBmaW5pYnVzIGVsZWlmZW5kLCBlbmltIGVuaW0gdmVoaWN1bGEgb2RpbywgYSBtYXR0aXMgZGlhbSBtYWduYSBxdWlzIGxlby4gUHJhZXNlbnQgbm9uIG5lcXVlIHZlc3RpYnVsdW0sIHJob25jdXMgbnVsbGEgc2VkLCBoZW5kcmVyaXQgbGVvLiBTZWQgdGluY2lkdW50IGxlbyBpZCBtYXNzYSBlbGVpZmVuZCwgZWdldCBjb25kaW1lbnR1bSBkb2xvciBpbnRlcmR1bS48L3NwYW4-PC9mb250PjwvcD48cCBzdHlsZT0iY29sb3I6IHJnYigzNCwgMzQsIDM0KTsgZm9udC1mYW1pbHk6IGFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEyLjgwMDAwMDE5MDczNDlweDsgdGV4dC1hbGlnbjoganVzdGlmeTsgbWFyZ2luLWJvdHRvbTogMTRweDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOyI-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTFweDsgbGluZS1oZWlnaHQ6IDE0cHg7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zOyI-Vml2YW11cyBhdCBoZW5kcmVyaXQgZGlhbS4gQWVuZWFuIGludGVyZHVtIGNvbnNlcXVhdCBwb3J0YS4gTmFtIGEgYXVndWUgc2VkIGlwc3VtIHZlc3RpYnVsdW0gcHJldGl1bSBxdWlzIGlkIGR1aS4gQWVuZWFuIGlkIHJpc3VzIGVuaW0uIER1aXMgdGVtcHVzIGVyb3MgZ3JhdmlkYSwgdmVuZW5hdGlzIG1hc3NhIHBvcnR0aXRvciwgdGVtcG9yIHRlbGx1cy4gRXRpYW0gY29uc2VxdWF0IGxpYmVybyBzaXQgYW1ldCBvZGlvIHZ1bHB1dGF0ZSwgZXUgZWdlc3RhcyBsaWd1bGEgcGVsbGVudGVzcXVlLiBEdWlzIHVybmEgdGVsbHVzLCBwcmV0aXVtIG5vbiBldWlzbW9kIG5vbiwgdml2ZXJyYSBlZ2V0IGR1aS4gQWxpcXVhbSBldCBleCBtZXR1cy4gSW4gZXggbG9yZW0sIGZpbmlidXMgaWQgdm9sdXRwYXQgaW4sIGxvYm9ydGlzIHZlbCBvcmNpLiBVdCB2dWxwdXRhdGUgbHVjdHVzIHB1cnVzIG5vbiB2ZWhpY3VsYS4gUHJhZXNlbnQgbWFnbmEgc2FwaWVuLCBzb2xsaWNpdHVkaW4gbmVjIG1hc3NhIGFjLCBydXRydW0gYXVjdG9yIGF1Z3VlLiBTZWQgZXN0IG51bmMsIGNvbW1vZG8gaGVuZHJlcml0IGZhY2lsaXNpcyBhYywgbW9sZXN0aWUgZGlnbmlzc2ltIGFyY3UuIE51bGxhbSB2ZWwgZXJvcyBuZXF1ZS4gQWxpcXVhbSBmcmluZ2lsbGEgdmVuZW5hdGlzIGVyb3MsIHZlbCBwZWxsZW50ZXNxdWUgbWkgY29uZ3VlIHNlZC48L3NwYW4-PGJyPjwvcD48cCBzdHlsZT0iY29sb3I6IHJnYigzNCwgMzQsIDM0KTsgZm9udC1mYW1pbHk6IGFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEyLjgwMDAwMDE5MDczNDlweDsgdGV4dC1hbGlnbjoganVzdGlmeTsgbWFyZ2luLWJvdHRvbTogMTRweDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOyI-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTFweDsgbGluZS1oZWlnaHQ6IDE0cHg7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zOyI-UXVpc3F1ZSBjb25zZXF1YXQgZmF1Y2lidXMgZXN0LCBldSBlZmZpY2l0dXIgYXVndWUgdml2ZXJyYSBiaWJlbmR1bS4gQ3JhcyB2YXJpdXMgbW9sZXN0aWUgc2FwaWVuIHV0IHZhcml1cy4gQWVuZWFuIHZpdGFlIHB1cnVzIHVybmEuIEV0aWFtIGNvbnNlY3RldHVyIGV1aXNtb2QgbGVjdHVzIHNlZCBtYXhpbXVzLiBOdW5jIG5lYyB0ZWxsdXMgZHVpLiBQZWxsZW50ZXNxdWUgbWFsZXN1YWRhLCBpcHN1bSBub24gdmVoaWN1bGEgdWxsYW1jb3JwZXIsIG5pYmggZmVsaXMgZmFjaWxpc2lzIGF1Z3VlLCBpZCB2ZW5lbmF0aXMgbWFzc2EgbmlzbCBpbiBmZWxpcy4gRnVzY2UgYWxpcXVhbSBjb252YWxsaXMgZmVybWVudHVtLiBJbiBtYWxlc3VhZGEsIGFudGUgdmVsIG1hbGVzdWFkYSBzY2VsZXJpc3F1ZSwgbmVxdWUgZXJhdCBtYXR0aXMgbWFnbmEsIG5vbiBmYWNpbGlzaXMgbWF1cmlzIHRlbGx1cyBub24gZXJvcy4gQWVuZWFuIHZpdGFlIGVyb3MgbHVjdHVzIGxpZ3VsYSB2aXZlcnJhIGZpbmlidXMgbm9uIHF1aXMgZXN0LiBTZWQgZXQgY29uZ3VlIHNlbSwgdm9sdXRwYXQgbW9sZXN0aWUgb2Rpby4gTmFtIGVyYXQgc2FwaWVuLCBmaW5pYnVzIHZlbCB2b2x1dHBhdCB2ZWwsIHBvc3VlcmUgaWQgZWxpdC4gTnVsbGFtIGZyaW5naWxsYSwgbWF1cmlzIG5lYyBzYWdpdHRpcyBlZmZpY2l0dXIsIGxvcmVtIHVybmEgbW9sZXN0aWUgdGVsbHVzLCBub24gYmliZW5kdW0gb3JjaSBpcHN1bSB1dCBxdWFtLiBNYXVyaXMgcXVpcyBsb3JlbSBzb2RhbGVzLCBwaGFyZXRyYSBzZW0gaW4sIG1vbGVzdGllIHRvcnRvci48L3NwYW4-PGJyPjwvcD48cCBzdHlsZT0iY29sb3I6IHJnYigzNCwgMzQsIDM0KTsgZm9udC1mYW1pbHk6IGFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEyLjgwMDAwMDE5MDczNDlweDsgdGV4dC1hbGlnbjoganVzdGlmeTsgbWFyZ2luLWJvdHRvbTogMTRweDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOyI-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTFweDsgbGluZS1oZWlnaHQ6IDE0cHg7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zOyI-RG9uZWMgYXQgYXJjdSBzYWdpdHRpcywgcHVsdmluYXIgbGFjdXMgYWMsIHZlbmVuYXRpcyBtaS4gSW4gaGFjIGhhYml0YXNzZSBwbGF0ZWEgZGljdHVtc3QuIFF1aXNxdWUgcGhhcmV0cmEgZHVpIGFjIHBvc3VlcmUgbGFjaW5pYS4gRHVpcyBzY2VsZXJpc3F1ZSBwaGFyZXRyYSB1cm5hLCB1dCB1bHRyaWNlcyB2ZWxpdCB1bHRyaWNpZXMgaW4uIFByYWVzZW50IHZhcml1cyBlc3QgYWMgY29uZ3VlIGxvYm9ydGlzLiBNYWVjZW5hcyBpbXBlcmRpZXQgbW9sZXN0aWUgcHVydXMsIGEgZWZmaWNpdHVyIGRvbG9yIHZvbHV0cGF0IHZlbC4gRG9uZWMgdmVsaXQganVzdG8sIGZhY2lsaXNpcyBlZ2V0IGV4IHNpdCBhbWV0LCBiaWJlbmR1bSBhY2N1bXNhbiBuaXNsLiBJbiBpbiBsaWd1bGEgaWQgZGlhbSBsYWNpbmlhIGx1Y3R1cyB2aXRhZSBxdWlzIHZlbGl0LiBDcmFzIGFsaXF1YW0gZGlhbSB2aXRhZSBlcm9zIGZlcm1lbnR1bSBibGFuZGl0LiBBZW5lYW4gYXQgcmhvbmN1cyBvZGlvLiBTZWQgdWx0cmljZXMgYmliZW5kdW0gZXJhdCwgYWMgcGxhY2VyYXQgdHVycGlzIHNjZWxlcmlzcXVlIGlkLiBOdW5jIGNvbmRpbWVudHVtIHRvcnRvciBub24gZXN0IGV1aXNtb2QsIGEgbW9sZXN0aWUgbWkgZXVpc21vZC4gUGhhc2VsbHVzIHV0IHZlbGl0IHZlbCBqdXN0byBzY2VsZXJpc3F1ZSBhY2N1bXNhbiB2ZWwgdXQgbmlzbC4gQ3VyYWJpdHVyIGZyaW5naWxsYSBleCB1dCBzYXBpZW4gYWNjdW1zYW4gY29uZ3VlLiBVdCBtb2xsaXMgYXQgbGlndWxhIGVnZXQgZmluaWJ1cy48L3NwYW4-PGJyPjwvcD48cCBzdHlsZT0iY29sb3I6IHJnYigzNCwgMzQsIDM0KTsgZm9udC1mYW1pbHk6IGFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEyLjgwMDAwMDE5MDczNDlweDsgdGV4dC1hbGlnbjoganVzdGlmeTsgbWFyZ2luLWJvdHRvbTogMTRweDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOyI-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTFweDsgbGluZS1oZWlnaHQ6IDE0cHg7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zOyI-VmVzdGlidWx1bSBlZ2VzdGFzIGxhY3VzIGxlbywgYXQgbW9sZXN0aWUgYXVndWUgcHJldGl1bSBpZC4gSW50ZWdlciBzY2VsZXJpc3F1ZSBlZmZpY2l0dXIgbmlzaSBzaXQgYW1ldCBjb25zZWN0ZXR1ci4gTnVsbGEgcmlzdXMgbWksIGZldWdpYXQgZWdldCBpcHN1bSBhdCwgZmluaWJ1cyB0aW5jaWR1bnQgbWkuIFByb2luIHZlbCB0ZWxsdXMgYSBsb3JlbSBzYWdpdHRpcyBtYXhpbXVzLiBVdCB2dWxwdXRhdGUgZXJhdCBhbGlxdWV0IGlwc3VtIHJ1dHJ1bSBsYWNpbmlhLiBDbGFzcyBhcHRlbnQgdGFjaXRpIHNvY2lvc3F1IGFkIGxpdG9yYSB0b3JxdWVudCBwZXIgY29udWJpYSBub3N0cmEsIHBlciBpbmNlcHRvcyBoaW1lbmFlb3MuIERvbmVjIGlkIG1vbGxpcyBzZW0uIE1hZWNlbmFzIGZldWdpYXQgcmlzdXMgdmVsIGZldWdpYXQgZWZmaWNpdHVyLiBGdXNjZSBhbnRlIHRlbGx1cywgYmliZW5kdW0gYXQgcHJldGl1bSBhdWN0b3IsIG1hdHRpcyBlZ2V0IGlwc3VtLiBOdW5jIHNhZ2l0dGlzIHRvcnRvciBxdWlzIGFyY3Ugdml2ZXJyYSwgdmVsIGxvYm9ydGlzIGxhY3VzIGV1aXNtb2QuIFF1aXNxdWUgZGljdHVtIHRlbXBvciBiaWJlbmR1bS4gU2VkIG1heGltdXMgbGliZXJvIHNpdCBhbWV0IGp1c3RvIGZyaW5naWxsYSB0cmlzdGlxdWUuPC9zcGFuPjwvcD4gCQkgCSAgIAkJICA8L2Rpdj48L2JvZHk-DQo8L2h0bWw-', u'size': 5160}, u'partId': u'0.1', u'filename': u''}], u'body': {u'size': 0}, u'filename': u''},
{u'mimeType': u'text/plain', u'headers': [{u'name': u'Content-Type', u'value': u'text/plain'}, {u'name': u'Content-Transfer-Encoding', u'value': u'base64'}, {u'name': u'Content-Disposition', u'value': u'attachment; filename="villamosE.txt"'}], u'body': {u'attachmentId': u'ANGjdJ8D_1cYbyaSlXR4LOH0WEcY5G0wXTmiG4d85fkEfkiVGtaicJ_sEsJBSj8UsRfQv79C2Now8DKKvpuN4uhA1x3WBGATfxtFHd6m8YUOQkWPUZje37eLFeLAHjF1eiGo3dg3PPNRidhowbB6dXw4WW2Nqd9DioX3K_M9JmxTq4q_X_GUUHB3R5X_Y9yE-tvFdzeKMdWHLQG5-ah5sVaRDjS4gaD6U2ibMHV75yLfNj3P17xPfG9zU4igMYSS6QPI60Ry5aM7M1S_C30amy-HfJpA6fi-gEqqBtpGHg', u'size': 748}, u'partId': u'1', u'filename': u'villamosE.txt'}],
u'body': {u'size': 0}, u'filename': u''}}

不可调用的错误似乎暗示代码的最后一行应该是 gmail_service.users(),而不是当前的 gmail_service().users()