首页 > 解决方案 > 从电子邮件中提取文本后,空格替换为 =20

问题描述

我尝试使用 python 中的 email 和 imaplib 模块获取收到的 gmail 的文本。用utf-8解码后,得到消息的payload后,所有的空格还是换成=20。我可以使用另一个解码步骤来解决这个问题吗?

代码如下:(我从 youtube 教程中得到它 - https://youtu.be/Jt8LizzxkPU

``

import email
import imaplib



username = "abc"
password = "123"

mail = imaplib.IMAP4_SSL("imap.gmail.com")
mail.login(username,password)

mail.select("inbox")

result, data = mail.uid("search", None,"ALL")

inbox_item_list = data[0].split()

for item in inbox_item_list:
    #most_recent = inbox_item_list[-1]
    #oldest = inbox_item_list[0]

    result2, email_data = mail.uid('fetch',item,'(RFC822)') 

    raw_email = email_data[0][1].decode("utf-8")

    email_message = email.message_from_string(raw_email)

    to_ = email_message['To']
    from_ = email_message['From']
    subject_ = email_message['Subject']

    counter = 1
    for part in email_message.walk():
        if part.get_content_maintype() == "multipart":
            continue
        filename = part.get_filename()
        if not filename:
            ext = ".html"
            filename = "msg-part-%08d%s" %(counter, ext)
        counter += 1   

    #save file
    content_type = part.get_content_type()
    print(subject_)
    print (content_type)
    if "plain" in content_type:
        print(part.get_payload())
    elif "html" in content_type:
        print("do some beautiful soup")
    else:
        print(content_type)

``

标签: pythonpython-3.xemailimapimaplib

解决方案


尝试import quopri,然后当您获得电子邮件正文的内容(或=20s内部的任何文本)时,您可以使用quopri.decodestring()

我这样做

quopri.decodestring(part.get_payload())

但请记住,如果您特别想从quoted-printable. 通常我会说@jfs 的答案更整洁。


推荐阅读