Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在UTF-8中获取电子邮件?_Python_Imap_Quoted Printable - Fatal编程技术网

Python 如何在UTF-8中获取电子邮件?

Python 如何在UTF-8中获取电子邮件?,python,imap,quoted-printable,Python,Imap,Quoted Printable,我正在做一个Python脚本来获取我的电子邮件地址上的人发送的邮件 我使用的是ImapClient模块,我得到了电子邮件的内容,但奇怪的是,我所有的UTF-8字符都是编码的,如下所示: 否=C3=ABl 以下是我的代码: email_message = email.message_from_bytes(message_data[b'RFC822']) print(email_message.get_payload(0)) 我还尝试在我的get_payload中添加decode=

我正在做一个Python脚本来获取我的电子邮件地址上的人发送的邮件

我使用的是ImapClient模块,我得到了电子邮件的内容,但奇怪的是,我所有的UTF-8字符都是编码的,如下所示:

否=C3=ABl

以下是我的代码:

    email_message = email.message_from_bytes(message_data[b'RFC822'])
    print(email_message.get_payload(0))

我还尝试在我的
get_payload
中添加
decode=True
参数,但它会返回一个
NoneType
您必须首先确定您感兴趣的电子邮件部分。然后,您将根据该部分的编码解码该部分的内容。每个部分可能具有不同的编码和/或字符集。如果您对电子邮件的主体感兴趣,这通常是第一部分,可以是html,也可以是纯文本,具体取决于发送电子邮件的程序(一些用户代理,如gmail,将包括这两种形式)

您可以在邮件对象上使用电子邮件模块的功能来查看各种附件及其各自的内容类型。这些部分通过一个特殊的“边界”字符串(通常是随机的)彼此分离,该字符串不会出现在消息体中(以避免歧义)。让电子邮件模块为您遍历部件更容易——特别是因为部件可以嵌套

您在问题中显示的文本片段似乎引用为可打印编码。您可以在此处找到从引用的可打印到utf-8的转换示例:

一个例子:

我在下面添加了一个模拟原始消息的示例,它表示构成EmailMessage对象的字节。在电子邮件中,每个部分(主体、附件等)可以有不同的内容类型、字符集和传输编码。部件可以嵌入子部件,但电子邮件通常只有一个平面结构。对于作为附件的部件,通常还会找到一个内容处置值,该值将指示文件内容的建议文件名

Subject: Woah
From: "Sébastien" <seb@example.org>
To: Bob <bob@example.org>
Content-Type: multipart/alternative; boundary="000000000000690fec05765c6a66"

--000000000000690fec05765c6a66
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

S=C3=A9bastien est un pr=C3=A9nom.

--000000000000690fec05765c6a66
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div di=
r=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"lt=
r"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div=
dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr">...

...

看起来像。Python来解码这些。非常感谢您的完整答案,它真的帮助了我!:)
# remove quoted-printable encoding
unquoted = quopri.decodestring(mime_part_payload)

# latin-1 in this case is the charset of the mime part header
tmp_unicode = unquoted.decode('latin-1', errors='ignore')

# encode to desired encoding
u8 = tmp_unicode.encode('utf-8')