有没有更好的方法来通过google-api从gmail获取完整的消息

时间:2016-01-21 11:05:40

标签: python-2.7 gmail-api

我正在开展一个项目,除此之外,我需要通过我的Google帐户阅读电子邮件中的邮件。我提出了一个有效的解决方案,但想知道是否有更简单的方法?

代码的第一部分非常标准,可以访问邮箱。但我发布它以便你可以看到我做了什么让它发挥作用。

SCOPES = 'https://www.googleapis.com/auth/gmail.modify'
CLIENT_SECRET ='A.json'
store =file.Storage('storage.json')
credz=store.get()
flags = tools.argparser.parse_args(args=[])
if not credz or credz.invalid:
    flow = client.flow_from_clientsecrets(CLIENT_SECRET,SCOPES)
    if flags:
        credz = tools.run_flow(flow, store, flags)

GMAIL = build('gmail','v1',http=credz.authorize(Http()))
response = GMAIL.users().messages().list(userId='me',q='').execute()
messages = []
if 'messages' in response:
    messages.extend(response['messages'])
print len(messages)
while 'nextPageToken' in response:
    page_token = response['nextPageToken']
    response = service.users().messages().list(userId='me', q=query,pageToken=page_token).execute()
    messages.extend(response['messages'])

FromMeInd=0
for message in messages:
    ReadMessage(GMAIL,'me',message['id'])

正是这部分我更感兴趣。有没有其他方法可以更直接地使用python和gmail-api获取消息。我查看了api文档但无法更有效地阅读它。

def ReadMessage(service,userID,messID):
    message = service.users().messages().get(userId=userID, id=messID,format='full').execute()
    decoded=base64.urlsafe_b64decode(message['payload']['body']['data'].encode('ASCII'))
    print decoded

1 个答案:

答案 0 :(得分:1)

您可以将正文设为raw,然后使用标准Python email module

解析它

根据官方API:https://developers.google.com/gmail/api/v1/reference/users/messages/get

message = service.users().messages().get(userId='me', id=msg_id,
                                         format='raw').execute()

print 'Message snippet: %s' % message['snippet']

msg_str = base64.urlsafe_b64decode(message['raw'].encode('ASCII'))

mime_msg = email.message_from_string(msg_str)

您将收到包含mime部分的payload的mime消息,例如纯文本,HTML,引用的可打印,附件等