使用 POP3 适配器处理多部分消息

POP3 适配器可以处理符合 RFC 2045、RFC 2046RFC 2047 中所述的 IETF 标准的 MIME 编码消息。 MIME 编码的消息可以包含不同内容类型的一个到多个部分。 本主题讨论 POP3 适配器如何处理多部分 MIME 编码消息。

使用 POP3 适配器接收多部分消息

如果使用 POP3 适配器的接收位置将 “应用 MIME 解码 ”选项设置为 True ,则 POP3 适配器在收到 MIME 编码的消息时执行以下作:

  1. 从它收到的 MIME 编码消息部分创建多部分 BizTalk 消息。 此多部分消息可以包含 1 到多个部分,并将包含与收到的 MIME 编码消息相同的部分数。

  2. 扫描 MIME 编码消息的标头。 如果任何标头与主题 POP3 适配器属性架构和属性 中记录的属性列表匹配,则这些标头将提升为多部分 BizTalk 消息作为上下文属性。

  3. 使用可配置算法将 MIME 编码消息的一部分指定为 BizTalk 消息正文部分。 用于确定哪个消息部分将是 BizTalk 消息正文部分的算法,请参阅 POP3 适配器使用的正文部件选择算法部分。

  4. 将多部分 BizTalk 消息发布到 MessageBox。

POP3 适配器使用的正文部件选择算法

当 POP3 适配器从收到的 MIME 编码消息部分创建多部分 BizTalk 消息时,它会选择其中一个消息部件作为 BizTalk 消息正文部件。 BizTalk 消息体由 BizTalk Server 用于消息验证、映射、属性推广、平面文件组装和其他操作。 多部分 BizTalk 消息的订阅者接收所有消息部分,但只会使用指定的 BizTalk 消息正文部件,除非使用业务流程、自定义管道或可理解多部分消息的适配器。 例如,可以将业务流程配置为读取多部分消息的所有部分;SMTP 适配器可以读取多部分消息的所有部分,并且可以将自定义管道配置为使用 MIME/SMIME 编码器管道组件。 有关使用业务编排来处理多部分消息的详细信息,请参阅以下部分:在业务编排中处理多部分消息

POP3 适配器根据为 正文部件索引正文部件内容类型提供的值从可用正文部件中选择 BizTalk 消息正文部分。

注释

POP3 适配器旨在识别 RFC 2046 中定义的实体内容类型。

下面介绍了用于选择电子邮件的 BizTalk 邮件正文部分的算法:

  1. 如果 正文部件索引 设置为 0 并且 正文部件内容类型 为空,则以下算法用于选择 BizTalk 消息正文部件:

    • 使用第一个设置了 Content-Description 标头为 “body” 的 MIME 部件。

    • 否则,将第一个 MIME 部件与 Content-Type 标头设置为“text/xml”一起使用。

    • 否则,请使用第一个 MIME 部件,并将其 Content-Type 标头设置为“text/plain”。

    • 否则,使用第一个 MIME 部件,其 Content-Type 标头设置为“text/”。

    • 否则,请使用第一个 MIME 部件。

  2. 否则,如果 正文部件索引 设置为 0 并且设置了 正文部件内容类型 ,则与指定 正文部件内容类型 匹配的传入消息的第一个正文部分被选为 BizTalk 消息正文部分。 如果没有与内容类型匹配的部件,那么该消息将被挂起。

  3. 否则,如果将 正文部件索引 设置为大于 0 且 正文部件内容类型 为空,则选择具有指定索引的正文部件作为 BizTalk 消息正文部分。 如果指定的索引大于正文部件数,则消息将暂停。

  4. 否则,如果将 正文部件索引 设置为大于 0 且设置了 正文部件内容类型 的值,则 正文部件索引 将仅应用于与指定正文部件 内容类型 匹配的正文部件,并将相应的正文部件选作 BizTalk 消息正文部分。 如果指定的索引超出具有匹配内容类型的部件数量,消息将被暂停。 如果没有具有匹配内容类型的部件,则会暂停消息。

  5. 选择为 BizTalk 消息正文部分的部件将成为发布到 MessageBox 的多部分 BizTalk 消息的第一部分,消息的其余部分将保留原始 MIME 编码消息中的顺序。

在编排中处理多部分消息

当 POP3 适配器从它收到的 MIME 编码消息创建多部分 BizTalk 消息时,即使只有一个部分被指定为 BizTalk 消息正文部件,所有部分也会发布到 MessageBox 数据库。 订阅多部分消息的业务流程随后可以使用这些部分。 本部分记录了在编排过程中处理多部分消息时的一些注意事项。

使用已知部分数量和已知部分类型处理多段消息

如果编排收到具有已知部件数量和已知部件类型的多部分消息,那么可以在编排中声明多部分消息,并在设计阶段设置部件数量和部件类型。

处理具有未知部件类型的多部分消息

如果业务流程收到具有未知部件类型的多部分消息,则可以在业务流程中声明多部分消息,并为类型未知的每个部件使用 XmlDocument 类型。

处理多部分消息,部件数未知,所有部件类型未知

如果您的业务流程正在接收一个部分数量未知的多部分消息,那么您可以在业务流程中声明一个仅包含一个XmlDocument类型部分的多部分消息来接收此消息。 如果收到包含大于已声明部件数的多部分消息,业务流程引擎将读取消息中有多少部分,然后为与声明消息类型中的部件数匹配的部分构造适当的部件类型,然后为其余部分构造 XmlDocument 部件。