【问题标题】:how to print the body of gmail in python using gmail api?如何使用 gmail api 在 python 中打印 gmail 的正文?
【发布时间】:2022-11-29 14:23:06
【问题描述】:

大家好,我正在尝试使用 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) 但我无法让它工作

【问题讨论】:

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


    【解决方案1】:

    在你的脚本中,如何进行以下修改?

    修改脚本:

    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

    • 运行此脚本时,将检索文本正文和 HTML 正文。例如,当您只想检索正文时,请将if p["mimeType"] in ["text/plain", "text/html"]:修改为if p["mimeType"] == "text/plain":

    参考:

    【讨论】:

    • 哇,太棒了!感谢您也添加了额外的 HTML 部分,并解释了如何在需要时删除。伟大的答案
    • @OrbitDuster 感谢您的回复和测试。很高兴您的问题得到解决。也谢谢你。
    猜你喜欢
    • 2021-04-04
    • 2020-06-13
    • 2018-11-10
    • 2020-08-24
    • 2020-06-21
    • 2015-06-24
    • 2017-01-10
    • 2018-07-17
    相关资源
    最近更新 更多