【问题标题】:How can I get the sender of an email gmail python API如何获取电子邮件 gmail python API 的发件人
【发布时间】:2021-04-27 03:06:08
【问题描述】:
def getbodyinbox():
    service = build('gmail', 'v1', credentials=creds)
    label_name = "READ-BY-SCRIPT"
    label_id = 'Label_8507504117657095973'
    results = service.users().messages().list(
        userId='me', q="-label:"+label_name, maxResults=1).execute()
    messages = results.get('messages', [])
    body = []
    if not messages:
        body = "no messages"
        return body
    else:
        for message in messages:
            msg = service.users().messages().get(
                userId='me', id=message['id']).execute()
            labels = msg['labelIds']
            if "INBOX" in labels:
                headers = msg['payload']['headers']
                headers = str(headers)
                print(headers)
                if "class_ix" in headers:
                    body.append(msg['payload']['parts'])
                    if 'data' in body[0][0]['body']:
                        body = base64.urlsafe_b64decode(
                            body[0][0]['body']['data'])
                    elif 'data' in body[0][1]['body']:
                        body = base64.urlsafe_b64decode(
                            body[0][1]['body']['data'])
                    body = str(body)

                        
                    return body


print(getbodyinbox())

到目前为止,这是我的代码,其中删除了凭据的部分。它获取最新电子邮件的正文,没有标签“READ-BY-SCRIPT”,也有标签收件箱。如何调整它以获取电子邮件的发件人?

【问题讨论】:

    标签: python python-3.x gmail gmail-api


    【解决方案1】:

    您可以在 Message -> payload -> headers

    中获取电子邮件的发件人

    您只需匹配header['name'] == 'From' 并获得其等效的header['value']

    示例Message 响应正文(用于标头):

    {
      "payload": {
        "partId": "",
        "mimeType": "multipart/alternative",
        "filename": "",
        "headers": [
          
          {
            "name": "From",
            "value": "User \u003cuser@email.com\u003e"
          },
          
          .....
    
          {
            "name": "Subject",
            "value": "TEST EMAIL"
          },
    
        ],
    
      }
    }
    

    示例代码:

    headers = msg['payload']['headers']
    
    for header in headers: # getting the Sender
        if header['name'] == 'From':
            msg_from = header['value']
            break
    

    注意:

    Header sender 值有这种格式:"User \u003cuser@email.com\u003e"

    你可以通过解析从开始到\u003c标签的字符串来获取发件人的姓名,而你可以通过解析\u003c\u003e标签中包含的字符串来获取发件人的电子邮件。

    【讨论】:

      猜你喜欢
      • 2014-09-07
      • 2021-04-19
      • 2020-03-25
      • 1970-01-01
      • 2019-04-19
      • 1970-01-01
      • 2018-08-25
      • 2020-09-04
      • 1970-01-01
      相关资源
      最近更新 更多