MIME 消息

MIME 头

MIME 消息由数据和元数据构成。MIME 元数据由 HTTP-style 头和 MIME 边界定界符构成。每个头占一行,是以冒号分隔的“名称 - 值”对。ASCII 序列 <CR><LF> 结束该行。这些头的序列,称为头块,通过空行(即:<CR><LF><CR><LF>)结束。该 HTTP-style 后面的所有头都可以出现在 MIME 文档中。标准 MIME 头的数量在 MIME 标准头字段中进行了描述。

Content-Type

MIME 解析器唯一必需的头是 Content-Type 头。该头指定消息中数据的类型。如果 Content-Type 的值以“multipart”开始,则该消息是多段式 MIME 消息。对于多段式消息,Content-Type 还必须包含边界属性,该边界属性提供用于界定消息部分的文本。每个单独的 MIME Part 具有它自己的 Content-Type 字段,该字段指定 Part 中数据的类型。它也可以是多段式的,以允许嵌套多段式消息。带有任何其他 Content-Type 值的 MIME 部分作为 BLOB 数据处理。

如果 MIME 文档是通过 HTTP 发送的,则 Content-Type 头出现在 HTTP 头块中,而不是显示在 MIME 消息体中。由于这个原因,代理将 Content-Type 头的值作为逻辑树中 Properties 文件夹中的 ContentType 属性进行管理。这允许 MIME 解析器为通过 HTTP 接收的 MIME 文档获取 Content-Type 的值。如果需要创建新的 MIME 树,或修改 Content-Type 的值。使用 MIME 域中的 ContentType 属性设置 Content-Type 值。在 MIME 树或 HTTP 树中直接设置 Content-Type 值可导致该值被忽略或使用不一致。下面的 ESQL 示例演示了如何设置代理 ContentType 属性:
SET OutputRoot.Properties.ContentType = 'text/plain';

解析

MIME 域不执行全部 MIME 规范。这可用于在其他应用程序中使用可能是无效的消息。例如,MIME 解析器不坚持要求有 MIME-Version 头。MIME 解析器使用以下约束:
  • MIME 头必须具有正确的格式。这表示:
    • 每个头占一行,是冒号分隔的“名称 - 值”对,由 ASCII 序列 <CR><LF> 结束。
    • 头行必须使用 7 位 ASCII。
    • 使用分号分隔参数:
      Content-Type: Multipart/Related; boundary=MIME_boundary; type=text/xml
    • 头可以在括号中包含注释,例如:
      MIME-Version: 1.0 (Generated by XYZ)
  • 以空格开始的行作为前一行的续行处理。这允许长的头分隔成多行。
  • 如果头块中的两个或多个头具有相同名称,则它们的值并置在以逗号分隔的列表中。
  • 顶级 MIME Content-Type 头必须可用。头是不区分大小写的。如果传输机制是 HTTP,则 HTTP 头中的任意 Content-Type 值用作顶级 Content-Type。如果传输机制不是 HTTP,则 Content-Type 必须出现在 MIME 消息的初始头块中。
  • Content-Type 值是介质类型,后面是 / 字符和子类型。其示例是 text/xmlmultipart/related。解析器不验证子类型。该值后面可以跟一个或多个分号分隔的参数。
  • 如果消息的介质类型是多段式的,则边界属性必须提供用于界定单独 MIME 部分的文本。
  • 每个单独的 MIME 部分都可以具有它自己的 Content-Type 头。Part 头可以有介质类型“multipart”,这允许嵌套多段式消息。在这种情况中,必须提供有效的边界属性,并且它的值必须与消息中先前定义的值不同。带有任何其他 Content-Type 值的 MIME 部分作为 BLOB 数据处理。
  • MIME 多段式边界定界符用 7 位 ASCII 表示。边界定界符由以连字符对开始后跟边界字符串的行构成。该序列不得出现在 MIME 消息中任何不作为边界的地方。MIME 结束定界符是一个连字符对,接着是 MIME 边界字符串,再接着是其他连字符对。所有定界符行都必须以 ASCII 序列 <CR><LF> 结束。定界的消息的示例为:
    --MIME_boundary
    message data
    --MIME_boundary
    message data
    --MIME_boundary--
    其中,MIME_boundary 是边界定界符字符串,message data 表示消息数据。
  • MIME 介质类型“message”不受支持,会在运行时导致错误。
  • 任何前同步信号数据(初始 MIME 头块和第一个边界定界符之间的文本)或结尾数据(最后一个边界定界符后面的文本)作为仅值元素存储在逻辑树中。前同步信号数据和结尾数据只能分别作为 Parts 节点的第一个子代和最后一个子代出现。
  • MIME 解析器不支持随需应变的解析,且忽略“解析计时”属性。解析器不会对照消息模型验证 MIME 消息,并忽略 Message Brokers Toolkit 验证属性。

多段式 MIME 的特殊情况

MIME 解析器主要用于与多段式 MIME 消息一起使用。但是,该解析器还处理某些特殊情况:
  • 只有一个 Part 的多段式 MIME。MIME 部分的逻辑树按常规保存 Content-Type 和其他信息,但用于附件的 Data 元素为空。
  • 单段式 MIME。对于单段式 MIME,逻辑树没有 Parts 子代。MIME 树的最后一个子代是 Data 元素。Data 元素是包含消息数据的 BLOB 的父代。
  • 不带内容的 MIME 部分。

安全 MIME(S/MIME)

S/MIME 是用于发送安全电子邮件的标准。S/MIME 具有外层 Content-Type multipart/signed,带参数 protocolmicalg,这些参数定义用于对消息进行加密的算法。一个或多个 MIME 部分可以具有已编码的内容。这些部分具有 Content-Type 值,例如,application/pkcs7-signature)和 Content-Transfer-Encoding base64。MIME 域并不尝试解释或验证消息是否已实际签署。

相关概念
MIME 树详细信息
逻辑树结构
消息建模概念
相关任务
使用消息体内容
相关参考
MIME 标准头字段
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ac30080_