imaplib:决定主要类型的因素是" text"或" multipart"

时间:2016-09-28 16:12:16

标签: python email imaplib

我一直在为小工具编写python代码,其中我试图使用python库imaplib和email来获取邮件。 代码语句如下所示。

import imaplib
import email
mail = imaplib.IMAP4_SSL('imap.server')
mail.login('userid@mail.com', 'password')
result, data = mail.uid('search', None, "ALL")
latest_email_uid = data[0].split()[-1]
result, data = mail.uid('fetch', latest_email_uid, '(RFC822)')
raw_email = data[0][1]
email_message = email.message_from_string(raw_email)
maintype = email_message_instance.get_content_maintype()

我正在同时从不同的主机执行脚本。 我面临的问题是,在获取邮件正文时,对于相同的传入电子邮件,在第一台主机上,mac maintype被评估为" text"而对于其他主机,其评估为" multipart"在脚本执行期间。

想知道这些值是如何在运行时确定的,如果我总是希望maintype是" multipart",我应该在电子邮件正文中编写电子邮件时遵循什么标准布局。

1 个答案:

答案 0 :(得分:0)

来自评论:

  两个案例的

raw_email都有具有多个值的原始html代码。所有大多数html代码都是相同的,除了很少的差异。对于maintype = multipart,Content-Type =" multipart / alternative",存在边界标记。对于maintype = text,Content-Type =" text / html",边界字段不存在

嗯,这回答了这个问题。 get_content_maintype会返回Content-Type的第一部分,<{>多部分 /替代multipart文字 / text HTML

multiplart/alternative表示电子邮件有多个替代版本。通常,这是html +文本。电子邮件通常以这种方式发送,因为它们可以被任何客户端(文本部分)读取,但仍然包含将在支持它的客户端中使用的HTML格式。

显然其中一封电子邮件是用html和文本发送的,而另一封电子邮件只包含html。