【问题标题】:How do I download every Gmail email with Python?如何使用 Python 下载每封 Gmail 电子邮件?
【发布时间】:2021-04-09 03:09:43
【问题描述】:

我想用尽可能少的 API 调用来下载它们。 https://github.com/googleapis/google-api-python-client/tree/master/samples 没有 Gmail。

【问题讨论】:

    标签: python google-api gmail gmail-api google-api-python-client


    【解决方案1】:

    从关注Python quickstart 开始,它将让您了解如何使 Auth 部分正常工作

    from __future__ import print_function
    import pickle
    import os.path
    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://www.googleapis.com/auth/gmail.readonly']
    
    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().labels().list(userId='me').execute()
        labels = results.get('labels', [])
    
        if not labels:
            print('No labels found.')
        else:
            print('Labels:')
            for label in labels:
                print(label['name'])
    
    if __name__ == '__main__':
        main()
    

    一旦您了解这是做什么的,您应该可以咨询 user message list 以了解如何更改它以列出消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-18
      • 2010-12-19
      • 1970-01-01
      • 2011-11-27
      • 2016-06-15
      • 1970-01-01
      • 2011-02-28
      • 2016-09-12
      相关资源
      最近更新 更多