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

所以

我正在使用Python脚本来获取人们在我的电子邮件地址上发送的邮件。

我正在使用ImapClient模块,并且得到了电子邮件的内容,但原型很奇怪,我所有的UTF-8字符都经过编码,如下所示:

否= C3 = AB1

这是我的代码:

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

我也尝试decode=True在我参数中添加参数get_payload,但是返回了一个NoneType

init_js

您必须首先确定您感兴趣的电子邮件部分。然后,根据该部分的编码对该部分的内容进行解码。每个部分可以具有不同的编码和/或字符集。如果您对电子邮件的主体感兴趣,通常这是第一部分,可以是html或纯文本,具体取决于发送电子邮件的程序(某些用户代理(例如gmail)将同时包含这两种形式) )。

您可以在邮件对象上使用电子邮件模块的EmailMessage.walk()函数来查看各种附件及其各自的内容类型。这些部分之间用特殊的“边界”字符串(通常是随机的)分隔开,该字符串不在消息正文中出现(为避免歧义)。让电子邮件模块为您遍历零件更容易-尤其是因为零件可以嵌套。

您在问题中显示的文本片段似乎是带引号的可编码编码。您可以在此处找到从quoted-printable到utf-8的转换示例:将“ Quoteed-printable”编码更改为“ utf-8”

一个例子

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

Subject: Woah
From: "Sébastien" <[email protected]>
To: Bob <[email protected]>
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">...

...

选择了感兴趣的部分后,您必须使用该部分的编码设置来正确转换有效负载。您首先要撤消任何传输编码(例如,quoted-printable),然后根据字符集对结果字符串进行解码。

如果您想要的部分的字符集已经存在UTF-8,那么您要做的就是撤消content-transfer-encoding(例如,删除带引号的可打印序列)。但是,如果部分的字符集不同,例如Latin-1,则必须从字节转到unicode,然后再从unicode转到utf8:

# 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')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在wp8中以编程方式获取主要或辅助电子邮件地址?

如何在Redmine中获取当前用户的电子邮件?

如何在iOS中从Twitter获取电子邮件

如何从WooCommerce中的新订单电子邮件中获取电子邮件收件人

如何通过Jmeter获取特定电子邮件ID中收到的最新电子邮件

从查询结果中获取电子邮件后,如何发送到多封电子邮件?

如何在odoo的电子邮件模板中获取用户公司和管理员的电子邮件ID

如何在imap中使用UID回复特定的电子邮件在php中获取电子邮件

如何在 laravel 8 中验证电子邮件是否为“有效电子邮件”而不发送“电子邮件验证”?

Microsoft Graph:如何从电子邮件中获取别名?

如何从生成的令牌中获取电子邮件

如何从电子邮件中获取收件人

如何通过Laravel中的Guzzle从Facebook获取电子邮件?

Python-如何发送utf-8电子邮件?

如何通过Ruby on Rails中的营销电子邮件API获取sendgrid中的可用电子邮件配额

如何通过PowerShell从Oulook文件夹内的电子邮件中获取电子邮件地址?

如何从字段中获取电子邮件ID并将电子邮件发送到该字段

如何在flutter中的side-nav-bar中获取当前登录的用户电子邮件?

如何获取电子邮件域

如何从角度路线获取电子邮件?

如何获取SMTP电子邮件日志

如何从url获取电子邮件ID?

如何在Circuit JavaScript SDK中获取向bot发送消息的用户的电子邮件?

如何在OSX Swift中从message:// URL获取电子邮件主题

Codeigniter的电子邮件库,如何在send()方法中获取cc,bcc值

如何在Android中获取AWS Cognito用户电子邮件属性?

如何在 WooCommerce 中高效地从电子邮件限制中获取优惠券

如何在 android 8.1 版中获取日历电子邮件 ID?

给定SHA1,如何在git中获取(仅)作者姓名或电子邮件?