python - 从电子邮件中提取文本后,空格替换为 =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)
``
解决方案
尝试import quopri
,然后当您获得电子邮件正文的内容(或=20s
内部的任何文本)时,您可以使用quopri.decodestring()
我这样做
quopri.decodestring(part.get_payload())
但请记住,如果您特别想从quoted-printable
. 通常我会说@jfs 的答案更整洁。
推荐阅读
- postgresql - Postgres GIN 索引不通过 Liquibase 脚本创建
- android - 如何从可穿戴设备连接到我的手机?
- spring - Hibernate 按需获取 @Formula 注释字段
- javascript - 使用 GTM 元素可见性触发器和数据层推送动态内容
- .net - 防火墙阻止 Windows 服务 WiX
元素 - javascript - 基于点击元素的模糊异常
- javascript - 如何通过使用 javascript 和 php 提供密码来自动填充城市名称?
- python - Detect symbols that are not enclosed within double quotes (regex)
- vba - 工作表事件引发称为类型不匹配错误的异常
- c - 如何在计算着色器中修改顶点的特定属性