Python IMAP:=?utf-8?Q?在主题字符串中
我正在显示带有Python IMAP:=?utf-8?Q?在主题字符串中,python,email,character-encoding,imap,mime,Python,Email,Character Encoding,Imap,Mime,我正在显示带有IMAP的新电子邮件,除了一个邮件主题显示为: =?utf-8?Q?主题?= 如何修复它?在MIME术语中,这些编码块称为编码字。您可以这样解码它们: import email.Header text, encoding = email.Header.decode_header('=?utf-8?Q?Subject?=')[0] 查看文档了解更多详细信息。这是一个MIME。您可以使用以下方法对其进行分析: 试一试 因为imaplib是一个非常过度的低级库,返回的结果很难处理 安装
IMAP
的新电子邮件,除了一个邮件主题显示为:
=?utf-8?Q?主题?=
如何修复它?在MIME术语中,这些编码块称为编码字。您可以这样解码它们:
import email.Header
text, encoding = email.Header.decode_header('=?utf-8?Q?Subject?=')[0]
查看文档了解更多详细信息。这是一个MIME。您可以使用以下方法对其进行分析:
试一试
因为imaplib
是一个非常过度的低级库,返回的结果很难处理
安装
pip安装imbox
用法
from imbox import Imbox
with Imbox('imap.gmail.com',
username='username',
password='password',
ssl=True,
ssl_context=None,
starttls=False) as imbox:
all_inbox_messages = imbox.messages()
for uid, message in all_inbox_messages:
message.subject
在Python 3.3+中,如果其
policy
参数设置为policy,则中的解析类和函数将自动解码标题中的“编码字”。默认值
>>> import email
>>> from email import policy
>>> msg = email.message_from_file(open('message.txt'), policy=policy.default)
>>> msg['from']
'Pepé Le Pew <pepe@example.com>'
高级IMAP库在这里可能很有用:
- 解析的电子邮件属性
- 用于搜索电子邮件的查询生成器
- 电子邮件操作:复制、删除、标记、移动、查看
- 文件夹操作:列表、设置、获取、创建、存在、重命名、删除、状态
- 无依赖项
从email.header导入解码头,生成头
解码=str(生成标题(解码标题(“=?utf-8?Q?主题?=”))
请参阅和的文档。“我如何修复它?”-为什么您认为它已损坏?它应该只显示“主题”-在=?utf-8?Q?中有什么?在Python2和Python3中,
email.header.decode_header
(小写m
)是通用名称。此外,在您的代码中,text
实际上不是一个文本,而是一个字节变量。事实上,imbox能够动态解码其他base64编码(在imaplib等中)的主题和其他字段。但是,请注意,如果某个字段丢失,将抛出KeyError。您可以用更通俗的方式重写它吗?@wbg此代码有什么不通俗的地方?你会改变什么?现在来看,我觉得它写得相当好,是Python表现力的典范。也许是因为Detejan的失误?如果您只是针对Python3,那么可以跳过If isinstance(word,bytes)else word
和前面的u
;这段代码已经设计成可以在Python2和Python3上工作。
>>> import email
>>> from email import policy
>>> msg = email.message_from_file(open('message.txt'), policy=policy.default)
>>> msg['from']
'Pepé Le Pew <pepe@example.com>'
>>> msg = email.message_from_file(open('message.txt'))
>>> msg['from']
'=?utf-8?q?Pep=C3=A9?= Le Pew <pepe@example.com>'
from imap_tools import MailBox, AND
# get list of email subjects from INBOX folder
with MailBox('imap.mail.com').login('test@mail.com', 'pwd', 'INBOX') as mailbox:
subjects = [msg.subject for msg in mailbox.fetch()]