当前位置: 首页 > 面试题库 >

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

包和泰
2023-03-14
问题内容

前一段时间,我写了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/*的零件,默认处置方式是“内联”(因此通常没有明确说明),而大多数其他部件的默认处置方式是“附件”。您需要参考相关标准以获取严格的定义,但可能会有些许困难,因为许多现实世界中的应用html" target="_blank">程序并非特别符合RFC。

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

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



 类似资料:
  • 问题内容: 如何在多部分电子邮件中使用html标签。当我使用它时,不能将其识别为粗体标签。 问题答案: 嗯,您正在使用Java。 请注意,我认为您应该始终在HTML电子邮件中设置纯文本替代项。 此代码还允许您内嵌图像(通过HTML从引用,但并非所有电子邮件客户端都支持此功能。

  • 我正在寻找一种方法来解析多部分/可选电子邮件的正文部分。目前,我有一个使用Email::Mime模块的perl脚本,它可以正确解析text/plain和text/html。尽管我的问题是,当我解析一个多部分/可选电子邮件时,$part- PERL代码 来源

  • Google留档举例如下: POST/upload/gmail/v1/users/userId/messages/send?uploadType=多部分HTTP/1.1主机:www.googleapis。com授权:承载您的授权令牌内容类型:多部分/相关;边界=foo\u bar\u baz内容长度:整个请求体中的字节数 --foo_bar_baz内容类型:application/json;字符集

  • TestNG生成一个可通过电子邮件发送的报告。我已经看到可以通过使用监听器自定义这个报告。却得不到我想要的。我的要求是在本报告的摘要部分包括额外的细节。我希望能够添加一个新的表或额外的列来显示测试执行的环境细节。 试图附上一个截图,但显然遗漏了一些东西,它没有出现。

  • 我们还发现Identity Toolkit API检测到了许多错误,所以我们试图添加登录、注销和电子邮件的URL,但当试图保存时没有发生什么。 我们错过了什么?

  • 我已经写了一段时间的iPhone应用程序,发送数据到服务器,接收数据(通过HTTP协议),没有想太多。理论上,我主要熟悉进程,但我不太熟悉的部分是HTTP多部分请求。我知道它的基本结构,但它的核心我不知道。 似乎每当我发送不同于纯文本的东西(如照片,音乐),我必须使用多部分请求。有人能简单地向我解释一下为什么要用它,它的优点是什么吗? 如果我使用它,为什么这样发送照片更好?