如何使用Gmail Python API获取电子邮件发件人的电子邮件地址

问题描述:

使用Google API python客户端,我想查找电子邮件发件人的电子邮件地址/名称。 到目前为止,我已经提取了有关该消息的详细信息,但我无法找到一种方法来提取查找程序的信息。如何使用Gmail Python API获取电子邮件发件人的电子邮件地址

这里是代码片段:

from __future__ import print_function 
import httplib2 
import os 

from apiclient import discovery 
from oauth2client import client 
from oauth2client import tools 
from oauth2client.file import Storage 

try: 
    import argparse 
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args() 
except ImportError: 
    flags = None 

# If modifying these scopes, delete your previously saved credentials 
# at ~/.credentials/gmail-python-quickstart.json 
SCOPES = 'https://www.googleapis.com/auth/gmail.readonly' 
CLIENT_SECRET_FILE = 'client_secret.json' 
APPLICATION_NAME = 'Gmail API Python Quickstart' 


def get_credentials(): 
    """Gets valid user credentials from storage. 

    If nothing has been stored, or if the stored credentials are invalid, 
    the OAuth2 flow is completed to obtain the new credentials. 

    Returns: 
     Credentials, the obtained credential. 
    """ 
    home_dir = os.path.expanduser('~') 
    credential_dir = os.path.join(home_dir, '.credentials') 
    if not os.path.exists(credential_dir): 
     os.makedirs(credential_dir) 
    credential_path = os.path.join(credential_dir, 
            'gmail-python-quickstart.json') 

    store = Storage(credential_path) 
    credentials = store.get() 
    if not credentials or credentials.invalid: 
     flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES) 
     flow.user_agent = APPLICATION_NAME 
     if flags: 
      credentials = tools.run_flow(flow, store, flags) 
     else: # Needed only for compatibility with Python 2.6 
      credentials = tools.run(flow, store) 
     print('Storing credentials to ' + credential_path) 
    return credentials 

def main(): 
    """Shows basic usage of the Gmail API. 

    Creates a Gmail API service object and outputs a list of label names 
    of the user's Gmail account. 
    """ 
    credentials = get_credentials() 
    http = credentials.authorize(httplib2.Http()) 
    service = discovery.build('gmail', 'v1', http=http) 

    results = service.users().messages().list(userId='me').execute() 
    messages = results['messages'] 

    mail = service.users().messages().get(userId='me', id=messages[0]['id'], format='minimal').execute() 
    # I have other formats(RAW, METADATA and FULL) but I cannot parse them. 
    print(mail) 

if __name__ == '__main__': 
    main() 

我要寻找一些方法(无论是内置或第三方库)来解析API返回到返回更可读信息的电子邮件对象。一些临时方法也适用于时间。

我有一种特殊的方式来提取有关电子邮件的基本信息。

下面是摘录:

metadata = mail['payload']['headers'] 
# This list contains information about To, From and Subject among other gibberish. 

for d in metadata: 

    # for sender's information 
    if d['name'] == 'From': 
     print(d['value']) 

    # for subject of the mail 
    if d['name'] == 'Subject': 
     print(d['value'])