多部分电子邮件中的“部分”是什么?

0_跳

有点背景...

前一段时间,我写了Python一个处理电子邮件的程序,经常遇到的一件事就是知道电子邮件是否是“多部分的”。

经过一番研究,我知道它与包含HTML或附件等的电子邮件有关...但是我并不十分了解。

我对它的使用仅限于2个实例:

1.当我不得不从原始电子邮件中保存附件时

我刚刚在互联网上找到了它(可能是在这里-抱歉,您没有记下编写它的人,但是我似乎再也找不到他了:/),并将其粘贴到我的代码中

def downloadAttachments(emailMsg, pathToSaveFile):
    """
    Save Attachments to pathToSaveFile (Example: pathToSaveFile = "C:\\Program Files\\")
    """
    att_path_list = []
    for part in emailMsg.walk():
        # multipart are just containers, so we skip them
        if part.get_content_maintype() == 'multipart':
            continue

        # is this part an attachment ?
        if part.get('Content-Disposition') is None:
            continue

        filename = part.get_filename()

        att_path = os.path.join(pathToSaveFile, filename)

        #Check if its already there
        if not os.path.isfile(att_path) :
            # finally write the stuff
            fp = open(att_path, 'wb')
            fp.write(part.get_payload(decode=True))
            fp.close()
        att_path_list.append(att_path)
    return att_path_list

2.当我不得不从原始电子邮件中获取文本时

也是从互联网上的某人粘贴而没有真正了解它是如何工作的。

def get_text(emailMsg):
    """
    Output: body of the email (text content)
    """
    if emailMsg.is_multipart():
        return get_text(emailMsg.get_payload(0))
    else:
        return emailMsg.get_payload(None, True)

我所了解的...

如果电子邮件是多部分的,则可以重复这些部分。

我的问题是

这些部分到底什么例如,您怎么知道html是哪个?或附件是哪一个?还是只是身体?

三元组

对于如何正确使用多部分消息,没有严格的层次结构或指南。MIME只是定义了一种将多个有效负载收集到单个电子邮件中的方法。我相信,最初的动机之一是能够将图片嵌入文字中。但是能够将二进制文件附加到文本消息上,更广泛的说,就是能够创建带有有效载荷的结构化消息,这些有效载荷以任意方式相关,这是应用程序以其认为合适的任何方式使用的简单条件。

常见的误解是将层次结构假定为“主要部分”和“从属部分”。创建这种结构当然是可能的,但绝不是普遍做到的。实际上,大多数多部分消息只是具有一系列的部分而没有任何层次结构。用户的电子邮件客户端通常会选择一个“内联”部分作为首选的“主要”部分,以显示在消息窗格中,但这绝不是标准规定的,也不是发送方可以强制执行的。

每个MIME部分都有一组标头,它们告诉您类型,编码和配置;对于类型text/*零件,默认处置方式是“内联”(因此通常没有明确说明),而大多数其他部件的默认处置方式是“附件”。您需要参考相关标准以获取严格的定义,但可能会有些许困难,因为许多现实世界中的应用程序并非特别符合RFC。

对于您的具体问题,找到(隐式或显式)内联的最上面的叶部分,并显示支持用例的部分作为“主要”部分。如果您想将HTML强制为首选格式,则可以执行此操作。但是许多电子邮件应用程序将其推迟给用户决定,而且由于技术上的需要,身体残障或个人品味,某些用户肯定会选择纯文本(如果有)。

不幸的是,消息生产者最近的惯例是创建一个multipart/alternative带有text/plaintext/html成员容器,但是却提供了一个完全无用的text/plain部分,并将所有实际内容包含在一个text/html部分中。在这种情况下,正确的安排是,text/plain如果您不能在其中放入任何有用的东西,则完全不提供任何零件(但我想他们只在乎通过一些误导的垃圾邮件过滤器,而不是在实际地适应接收者的偏好)。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

多部分电子邮件

多部分电子邮件;纯文本作为附件

如何发送自定义的多部分电子邮件

多部分电子邮件PDF附件为空白

创建多部分电子邮件并在Linux中发送

没有模板和多部分电子邮件的 ActionMailer

MIME电子邮件多部分解析器

发送多部分/已签名的电子邮件C#

OSB电子邮件-强制多部分/混合

如何从python中的多部分电子邮件中抓取链接

多部分/混合的电子邮件附件未显示,仅在Windows 10 Mail中显示

多部分/混合电子邮件表单数据中md5的用途

如何在python 2中将正文文本添加到多部分电子邮件中?

发送包含嵌入式图像的多部分html电子邮件

最佳做法-发送javamail mime多部分电子邮件-和gmail

发送带有附件的电子邮件-多部分为空

将一些文件附加到 MIME 多部分电子邮件

我可以使用 Jade SmtpConnection 发送多部分电子邮件吗

为什么Django在normalize_email中仅小写电子邮件地址的域部分?

是什么导致此 SQL 中的多部分连接错误?

删除woocommerce电子邮件通知中的产品下载部分

在Javadoc中包含电子邮件的正确方法是什么?

在Codeigniter中配置电子邮件的最佳方法是什么?

使用 CURL 发送带有编码器=quoted-printable 的多部分/替代电子邮件。如何?

Python:多部分html电子邮件与嵌入式图像和附件一起发送

为什么System.Net.Mail.MailAddress构造函数在域部分中解析带有斜杠“ /”的电子邮件?

Python TypeError:无法在邮件的电子邮件正文部分中串联“ str”和“ list”对象

为什么我的angular / express nodemailer不包含电子邮件的“发件人”部分?

在多部分表单调用中,OKHttp中参数的正确位置是什么?