【问题标题】:Is there any nicer way to get the full message from gmail with google-api有没有更好的方法可以使用 google-api 从 gmail 获取完整消息
【发布时间】:2019-12-21 03:28:12
【问题描述】:

我正在进行一个项目,除其他外,我需要从我的谷歌帐户阅读电子邮件中的消息。我想出了一个可行的解决方案,但想知道是否有更简单的方法?

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

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

【问题讨论】:

    标签: python-2.7 gmail-api


    【解决方案1】:

    您可以将正文作为raw 获取,然后使用标准Python email module 对其进行解析

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

    import email
    
    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)
    

    您将收到一条带有 payload 的 mime 消息,其中包含 mime 部分,例如纯文本、HTML、引用的可打印、附件等。

    【讨论】:

    • 我收到NameError: name 'email' is not defined - 你如何导入电子邮件模块?
    • python 标准库中的email 模块;可以用import email导入;更多信息请访问docs.python.org/3/library/…
    猜你喜欢
    • 2018-01-17
    • 2015-10-05
    • 2019-03-16
    • 2016-03-18
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 2016-12-23
    相关资源
    最近更新 更多