代码之家  ›  专栏  ›  技术社区  ›  OrbitDuster

如何使用gmail api在python中打印gmail正文?

  •  1
  • OrbitDuster  · 技术社区  · 2 年前

    大家好,我正在尝试使用Gmail API打印来自发件人的特定电子邮件。我做了一些研究,看了一些关于如何打印发件人和主题的视频,但由于某种原因,我无法打印邮件的正文。我查看了Gmail API,没有找到任何有助于以文本形式打印正文的内容。

    如果需要打印邮件正文的帮助,请。。。

    service = build('gmail', 'v1', credentials=creds)
    results = service.users().messages().list(userId='me', labelIds=['INBOX'], q="from:specific email, is:unread").execute()
    
    messages = results.get('messages', [])
    
    if not messages:
      print("You have no New Messages.")
    
    else:
       message_count = 0
       for message in messages: 
           msg = service.users().messages().get(userId='me', id=message['id']).execute()
           message_count= message_count + 1
           email_data= msg['payload']['headers']
           for values in email_data:
               name = values["name"]
               if name == "From":
                   from_name = values ["value"]
                   print(from_name)
                   subject= [j['value'] for j in email_data if j["name"]=="Subject"]
                   print(subject)
    

    就像我说的那样,这段代码提取特定的电子邮件并打印发件人,而我所缺少的主题就是身体。

    我尝试了以下在stackoverflow中发布的内容: How to retrieve the whole message body using Gmail API (python) 但我没能成功

    1 回复  |  直到 2 年前
        1
  •  1
  •   Tanaike    2 年前

    修改的脚本:

    service = build("gmail", "v1", credentials=creds)
    results = service.users().messages().list(userId="me", labelIds=["INBOX"], q="from:specific email, is:unread").execute()
    
    messages = results.get("messages", [])
    
    if not messages:
        print("You have no New Messages.")
    
    else:
        message_count = 0
        for message in messages:
            msg = service.users().messages().get(userId="me", id=message["id"]).execute()
            message_count = message_count + 1
            email_data = msg["payload"]["headers"]
            for values in email_data:
                name = values["name"]
                if name == "From":
                    from_name = values["value"]
                    print(from_name)
                    subject = [j["value"] for j in email_data if j["name"] == "Subject"]
                    print(subject)
    
            # I added the below script.
            for p in msg["payload"]["parts"]:
                if p["mimeType"] in ["text/plain", "text/html"]:
                    data = base64.urlsafe_b64decode(p["body"]["data"]).decode("utf-8")
                    print(data)
    
    • 在这种情况下,请添加 import base64

    • if p["mimeType"] in ["text/plain", "text/html"]: if p["mimeType"] == "text/plain":

    参考: