Sun Java System Messaging Server 6.3 管理指南

12.8 附件和 MIME 处理

本节说明了涉及附件和 MIME 处理的关键字。其中包含以下各节:

12.8.1 忽略 Encoding 标题行

关键字:ignoreencodinginterpretencoding

MTA 可以用 Yes CHARSET-CONVERSION 将各种非标准邮件格式转换为 MIME。尤其是,RFC 1154 格式使用非标准 Encoding: 标题行。但是某些网关在此标题行中发出不正确信息,导致有时需要忽略此标题行。ignoreencoding 关键字指示 MTA 忽略所有 Encoding: 标题行。


注 –

除非 MTA 已启用 CHARSET-CONVERSION,否则任何情况下都将忽略此标题。interpretencoding 关键字指示 MTA 注意所有 Encoding: 标题行(如果配置为执行此操作),此关键字是默认设置。


12.8.2 Message/Partial 邮件的自动片段整理

关键字:defragmentnodefragment

MIME 标准提供了 message/partial 内容类型,用于将邮件分成较小的部分。当邮件必须在有大小限制的网络中传输,或者在不可靠的网络中传输时,此功能会很有用。在后一种情况下,邮件分段可以提供某种形式的“检查点”,当邮件传输期间出现网络故障时可以减少随后的复制工作。每一部分中都将包含信息,以便邮件到达目的地后可以自动重新组合邮件。

defragment 通道关键字和片段整理通道提供了在 MTA 中重新组合邮件的方法。当通道被标记为 defragment 时,在通道排队的所有部分邮件将被置于片段整理通道队列中。所有部分都到达之后,将重新组合邮件并进行发送。nodefragment 禁用此特殊处理功能。关键字 nodefragment 是默认设置。

12.8.2.1 片段整理通道

如果 defragment 关键字在目标通道中,则邮件被路由到片段整理通道。即,当 defragment 关键字出现在目标通道中时(MTA 通常将邮件置于此通道中排队),MTA 在邮件结构“内部查看”(MIME 解析),如果 MTA 看到邮件结构是一个 MIME 邮件片段,那么 MTA 自动将邮件路由到片段整理通道,而不是直接路由到(通常的)目标通道。

片段整理数据库包含有关进入 MTA 的邮件片段的信息,其中包括表明接受每个邮件片段的主机的信息。收到初始片段并在片段整理数据库中说明后,任何使用相同片段整理数据库的其他系统所收到的邮件的任何其他部分都将被路由到收到最初部分的主机。例如:

  1. 由于目标/出站通道上有 defragment 关键字,因此,message/partial; id=123; part=x 会在到达主机 1 后路由到主机 1 上的片段整理通道。

  2. 主机 1 上的片段整理通道检查片段整理数据库,以查看此邮件的其他部分是否已经到达。如果没有到,片段整理通道(主机 1 上的)将此部分输入片断整理数据库,并标明此部分在主机 1 上。

  3. 由于目标/出站通道上有 defragment 关键字,因此,message/partial; id=123; part=y 会在到达主机 2 后路由到主机 2 上的片段整理通道。

  4. 主机 2 上的片段整理通道将检查片段整理数据库,查看此邮件的第 x 部分是否已存在并存储在主机 1 上。片段整理通道可将此邮件片段重定向到主机 1(源会路由包含 @host1 的地址)。

  5. message/partial' id=123; part=y 到达主机 1,被路由到片段整理通道,片段整理通道运行并将它输入数据库,等等。

片段邮件的所有剩余部分都被重定向到收到邮件第一个部分(第一个收到的,不一定是 part=1)的主机。它们通过该主机的片段整理通道重新组合起来,最终成为组合好的、片段整理过的邮件(如果由于通知过多导致片段整理工作超时,各个片段将被原样发送出去)被发送到真正的目标通道。您可以获取邮件片段整理的部分负载平衡,具体取决于哪个主机恰好收到每个邮件的“第一个”部分。

12.8.2.2 片段整理通道保留时间

在片段整理通道队列中将邮件仅保留有限时间。如果发送第一个未传送通知之前时间已过去一半,将发送邮件的各个部分,不进行重新组合。选择此时间值排除了为片段整理通道队列中的邮件发送未传送通知的可能性。

通道关键字 notices 将控制发送未传送通知之前所经过的时间,因此也控制着邮件在分块发送之前被保留的时间。将关键字 notices 的值设置为希望保留邮件的时间的两倍,以进行可能的片段整理。例如,notices 的值为 4 可以使邮件片段保留两天:


defragment notices 4 
DEFRAGMENT-DAEMON

12.8.2.3 将基于 NFS 的文件系统用于片段整理和休假缓存

基于 NFS 的文件系统经常用于片段整理和休假缓存。通过让多个 MTA 系统共享同一片段整理缓存,一个应用程序可以在多个 MTA 系统之间共享片段整理数据库。要实现这一点,可以连接每个系统上的 msg-svr-base/config/ defragment_cache 和希望作为共享片段整理数据库(在共享的 NFS 磁盘上)的文件。

在任何情况下,支持正确的 NFS 文件语义(尤其是那些具有锁请求的,如 Solaris NFS)的 NFS 服务器可用于休假和片段整理缓存。如果使用 NFS, 请使用软加载 (soft mount) 选项。(硬加载 (hard mount) 是默认设置。)设置一个相对较短的超时值也是个不错的主意,超时值由 mount timeo 选项控制(请参见 mount_nfs(1M) 手册页)。

在 NFS 硬加载且 NFS 出现故障的情况下,将会看到各种系统上的片段整理通道挂起。在软加载的情况下,片段整理通道不会挂起,但因为它们无法打开片段整理缓存,所以不能与其他主机上的片段整理通道协作。在某个邮件的所有片段恰巧都先到达了同一主机的情况下(不太可能发生),该主机的片段整理通道应该能够重新组合邮件并将正确组合的邮件发送出去。更可能的情况是,片段在不同的主机上且不会重新组合,并且在片段整理通道的保留时间过期后,它们将被作为分离的片段发送出去。

12.8.3 大型邮件的自动分段

关键字:maxblocksmaxlines

某些电子邮件系统或网络传输无法处理超过特定大小限制的邮件。MTA 以各个通道为基础提供了实施此类限制的功能。大于所设置的限制的邮件将被自动分割(分段)成多个较小的邮件。用于这种分段的内容类型为 message/partial,并添加唯一的 ID 参数,以便同一邮件的不同部分可以彼此关联,并在可能的情况下由接收邮件程序自动重新组合。

关键字 maxblocksmaxlines 用于实施大小限制,超过此限制时将激活自动分段功能。这两个关键字后面都必须跟一个整数值。关键字 maxblocks 指定邮件中允许的最大块数。MTA 块通常为 1024 字节,可以使用 MTA 选项文件中的 BLOCK_SIZE 选项对其进行更改。关键字 maxlines 指定邮件中允许的最大行数。如果必要,可以同时实施上述两个限制。

某种程度上,邮件标题也包含在邮件大小中。由于不能将邮件标题分割成多个邮件,但是标题本身有可能超过指定的大小限制,因此使用一种相当复杂的机制来解释邮件标题大小。该逻辑由 MTA 选项文件中的 MAX_HEADER_BLOCK_USEMAX_HEADER_LINE_USE 选项控制。

MAX_HEADER_BLOCK_USE 用于指定 0 和 1 之间的一个实数。默认值为 0.5。在邮件可以使用的总块数(由 maxblocks 关键字指定)中,邮件标题可以占用该比例的块数。如果邮件标题大于该值,MTA 将以 MAX_HEADER_BLOCK_USEmaxblocks 的乘积作为 * MAX_HEADER_BLOCK_USE 标题的大小(标题大小取实际标题大小和 maxblocks 中较小的值)。

例如,如果 maxblocks 为 10 且 MAX_HEADER_BLOCK_USE 为默认值 0.5,则所有大于 5 个块的邮件标题将按 5 个块的标题来处理,如果邮件大小等于或小于 5 个块,则不对其进行分段。如果值为 0,将不对标题做任何邮件大小限制方面的处理。

如果值为 1,则标题可以使用所有可用大小。每个分段将始终至少包含一个邮件行,无论这样做是否导致超过大小限制。MAX_HEADER_LINE_USEmaxlines 关键字结合使用的方式与上述相似。

12.8.4 实施邮件行长度限制

关键字:linelength

SMTP 规范允许文本行最多包含 1000 字节。但是,某些传输对行的长度可能会实施更为严格的限制。linelength 关键字提供了以各个通道为基础的机制,用于限制允许的最大邮件行长度。如果在给定通道排队的邮件的行长于为该通道指定的限制,则对邮件进行自动编码。

MTA 中可用的各种编码总是将行长度减少到少于 80 个字符。编码后可以应用适当的解码过滤器来恢复原来的邮件。


注 –

编码只能将行的长度减少到少于 80 个字符。将行的长度值指定为小于 80 可能不会实际生成长度符合该限制的行。


linelength 关键字使数据编码执行“软”自动换行以用于传输。通常在接收端对编码进行解码,以便恢复原来的“长”行。有关“硬”自动换行的信息,请参见表 13–7 中的 "Record, text"。

12.8.5 解释 Multiparts 和 Message/RFC822 部分的内容传输编码字段

关键字:interpretmultipartencodingignoremultipartencodinginterpretmessageencodingignoremessageencoding

MIME 规范禁止在 multipart 或 message/rfc822 部分使用除 7 位、8 位和二进制以外的内容传输编码。一直以来就有些代理违反该规范而对 multiparts 和 message/rfc822 对象进行编码。因此,MTA 提供了接受和删除此类编码的代码。但是,最近又出现了另一种违反标准的情况,即存在一种具有 quoted-printable 或 base63 值的内容传输编码字段,但实际上该部分并未进行编码。如果 MTA 尝试解码此类邮件,则正如您所料,得到的结果通常是一个空白邮件。

涉及此问题的邮件已越来越多,因此添加了两对新的通道关键字以处理该问题,从而可以启用或禁用对 multiparts 和 message/rfc822 部分的内容传输编码的解释。第一对关键字是 interpretmultipartencodingignoremultipartencoding,第二对关键字是 interpretmessageencodingignoremessageencoding。默认值是 interpretmultipartencodinginterpretmessageencoding