Ste*_*hen 3 python google-api oauth-2.0 gmail-api
根据下面引用的文档,消息应包含 MessagePart,而 MessagePart 又应包含 MessagePartBody。
https://developers.google.com/gmail/api/reference/rest/v1/users.messages#Message
当我运行下面的代码时(这只是此处找到的示例脚本的修改版本,其中消息替换为标签)
from __future__ import print_function
import pickle
import os.path
import openpyxl
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://mail.google.com/']
def main():
"""Shows basic usage of the Gmail API.
Lists the user's Gmail labels.
"""
creds = None
# The file token.pickle stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
# Save the credentials for the next run
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
service = build('gmail', 'v1', credentials=creds)
# Call the Gmail API
results = service.users().messages().list(userId='me').execute()
messages = results.get('messages', [])
if not messages:
print('No messages found.')
else:
print('Messages:')
for message in messages:
print(message)
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
我只得到 Messageids 和 Threadsids 例如:
Messages:
{'id': '177045ba844e1991', 'threadId': '177045ba844e1991'}
{'id': '1770415ccdd222d7', 'threadId': '1770415ccdd222d7'}
{'id': '17703970573550eb', 'threadId': '17703970573550eb'}
{'id': '177031073928a223', 'threadId': '177031073928a223'}
{'id': '17702de505951773', 'threadId': '17702de505951773'}
{'id': '17702a3e6d1893de', 'threadId': '17702a3e6d1893de'}
Run Code Online (Sandbox Code Playgroud)
如何使用此 API 获取消息的实际正文?
\n\n请注意,每个消息资源仅包含 an
\nid和 athreadId。可以使用messages.get方法获取其他消息详细信息。
所以基本上这是一个两步过程:
\nlist在收件箱中获取电子邮件。get阅读有关它们的信息。它看起来像这样:
\nresults = service.users().messages().list(userId=\'me\').execute()\nmessages = results.get(\'messages\', [])\nmessages = [service.users().messages().get(userId=\'me\', id=msg[\'id\']).execute() for msg in messages]\nRun Code Online (Sandbox Code Playgroud)\n现在,如果您这样做,您将遇到问题,因为这会使请求一一对应。通过一个请求获取多条消息的方法是使用批量请求:
\nresults = service.users().messages().list(userId=\'me\').execute()\nmessage_ids = results.get(\'messages\', [])\n\nmessages = []\ndef add(id, msg, err):\n # id is given because this will not be called in the same order\n if err:\n print(err)\n else:\n messages.append(msg)\n\nbatch = service.new_batch_http_request()\nfor msg in message_ids:\n batch.add(service.users().messages().get(userId=\'me\', id=msg[\'id\']), add)\nbatch.execute()\nRun Code Online (Sandbox Code Playgroud)\n关于批量请求的一个重要注意事项是,调用回调的顺序可能与您开始时的顺序不同。
\n| 归档时间: |
|
| 查看次数: |
9389 次 |
| 最近记录: |