Sun Java System Messaging Server 6 2005Q4 管理指南

邮件的重新格式化

如上所述,CHARSET-CONVERSION 映射表对附件在 MIME 和若干专用邮件格式之间的转换也起作用。

以下各节给出了可以使用 CHARSET-CONVERSION 映射表进行的其他类型的邮件重新格式化的示例。

非 MIME 二进制附件转换

如果为处理邮件所涉及的所有通道启用了 CHARSET-CONVERSION,则特定的非标准(非 MIME)格式的邮件(例如,特定的专用格式的邮件或来自 Microsoft Mail [MSMAIL] SMTP 网关的邮件)将被自动转换成 MIME 格式。如果具有 tcp_local 通道,则此通道通常是来自 Microsoft Mail SMTP 网关的邮件的传入通道,以下命令将对传送到本地用户的邮件进行转换:

CHARSET-CONVERSION  

  IN-CHAN=tcp_local;OUT-CHAN=ims-ms;CONVERT         Yes

您可能还希望为其他本地邮件系统添加通道条目。例如,tcp_internal 通道条目:

CHARSET-CONVERSION

  IN-CHAN=tcp_local;OUT-CHAN=l;CONVERT              Yes
  IN-CHAN=tcp_local;OUT-CHAN=tcp_internal;CONVERT   Yes

或者,如果要对每个通道的邮件进行转换,您只需指定 OUT-CHAN=* 而不是 OUT-CHAN=ims-ms。但是这将增加邮件处理的开销,因为这时要对进入 tcp_local 通道的所有邮件进行仔细检查,而不只是检查发送到特定通道的邮件。

更重要的是,对于只是通过您的系统却未必属于您自己的站点的邮件,这种不加选择的转换会使系统在转换方面变得迟疑不决或无能为力,在这种情况下系统应该只起传输作用,不必更改除邮件信封和相关传输信息以外的其他信息。

要将 MIME 转换为 Microsoft Mail SMTP 网关可以理解的格式,请将 MTA 配置中的某个单独通道(例如 tcp_msmail)用于 Microsoft Mail SMTP 网关,然后将以下内容放入映射文件中:

CHARSET-CONVERSION  

  IN-CHAN=*;OUT-CHAN=tcp_msmail;CONVERT        RFC1154

重新标记 MIME 标题

某些用户代理或网关可能会发出 MIME 标题只包含很少信息的邮件,但是使用这些信息足以构建更精确的 MIME 标题。尽管最佳解决方案是正确配置这些用户代理或网关,但是如果它们不在您的控制范围之内,您可以要求 MTA 尝试重新构建更有用的 MIME 标题。

如果 CHARSET-CONVERSION 映射表的第一次探测产生了 YesAlways 关键字,则 MTA 将检查 conversions 文件是否存在。如果 conversions 文件存在,MTA 将在其中查找带有 RELABEL=1 的条目,如果找到这样的条目,MTA 将执行该条目中指定的 MIME 重新标记操作。有关 conversions 文件条目的信息,请参见控制转换处理

例如, 如下所示的 CHARSET-CONVERSION 表:


CHARSET-CONVERSION  

  IN-CHAN=tcp_local;OUT-CHAN=tcp_internal;CONVERT            Yes

与 MTA conversion 文件条目


out-chan=ims-ms; in-type=application; in-subtype=octet-stream; 
  in-parameter-name-0=name; in-parameter-value-0=*.ps; 
  out-type=application; out-subtype=postscript;   
  parameter-copy-0=*; relabel=1 

out-chan=ims-ms; in-type=application; in-subtype=octet-stream; 
  in-parameter-name-0=name; in-parameter-value-0=*.msw; 
  out-type=application; out-subtype=msword; 
     parameter-copy-0=* relabel=1

的组合将使邮件被重新标记:通过 tcp_local 通道到达并被路由到 ims-ms 通道的邮件,如果最初到达时的 MIME 标记为 application/octet-stream,但文件名参数带有扩展名 psmsw,则它们将分别被重新标记为 application/postscript 或 application/msword。(请注意,这种更精确的标记本来应该由原来的用户代理或网关自己执行。)这样的重新标记与 MIME-CONTENT-TYPES-TO-MR 映射表结合使用会特别有用,可用于将这样生成的 MIME 类型转换回相应的 MRTYPE 标记(这类标记需要进行精确的 MIME 标记才能以最佳方式运行);如果所有内容类型都只被标记为 application/octet-stream,则 MIME-CONTENT-TYPES-TO-MR 映射表最多只能将这些类型无条件地转换为 MRTYPE 一种类型。

利用以上示例组合以及包括以下内容的 MIME-CONTENT-TYPES-TO-MR 映射表条目

APPLICATION/POSTSCRIPT        PS 
APPLICATION/MSWORD              MW

原来的标记,例如

Content-type: application/octet-stream; name=stuff.ps

将被重新标记为

Content-type: application/postscript

然后被转换为 MRTYPE 标记 PS 以使邮件路由器知道需要 PostScript。

有时按照相反类型的方向进行重新标记也很有用,亦即将特定的 MIME 附件标记“降级”为通用二进制数据标记 application/octet-stream。而且,“降级”特定的 MIME 标记通常与 mime_to_x400 通道 (PMDF-X400) 或 xapi_local 通道 (PMDF-MB400) 上的 convert_octet_stream 通道关键字结合使用,以将所有二进制 MIME 附件强制转换为 X.400 bodypart 14 格式。

例如,如下所示的 CHARSET-CONVERSION 映射表

CHARSET-CONVERSION

    IN-CHAN=*;OUT-CHAN=mime_to_x400*;CONVERT Yes

与下面的 PMDF 转换文件条目

out-chan=mime_to_x400*; in-type=application; in-subtype=*;
   out-type=application; out-subtype=octet-stream; relabel=1
 
out-chan=mime_to_x400*; in-type=audio; in-subtype=*; 
   out-type=application; out-subtype=octet-stream; relabel=1 

out-chan=mime_to_x400*; in-type=image; in-subtype=*; 
   out-type=application; out-subtype=octet-stream; relabel=1 

out-chan=mime_to_x400*; in-type=video; in-subtype=*; 
   out-type=application; out-subtype=octet-stream; relabel=1

的组合将把各种特定的 MIME 附件标记降级为进入 mime_to_x400* 通道的所有邮件通用的 application/octet-stream 标记(从而可应用 convert_octet_stream)。

MacMIME 格式转换

Macintosh 文件包括两个部分,即包含 Macintosh 专用信息的资源分叉和包含可在其他平台上使用的数据的数据分叉。这使 Macintosh 文件的传输变得更为复杂,因为传输 Macintosh 文件部分有四种不同的常用格式。其中三种格式(Applesingle、Binhex 和 Macbinary)由在一个部分中共同编码的 Macintosh 资源分叉和 Macintosh 数据分叉组成。第四种格式(Appledouble)是多部分的格式,资源分叉和数据分叉位于不同的部分中。因此在非 Macintosh 平台上,Appledouble 可能是最有用的格式,因为在这种情况下可以忽略资源分叉部分,非 Macintosh 应用程序可以使用数据分叉部分。但是专门向 Macintoshe 进行发送时,其他格式可能会非常有用。

MTA 可以在这些不同的 Macintosh 格式之间进行转换。CHARSET-CONVERSION 关键字 AppledoubleApplesingleBinhexMacbinary 用于通知 MTA 将其他 MacMIME 结构化部分分别转换为 MIME 结构 multipart/appledouble、application/applefile、application/mac-binhex40 或 application/macbinary。此外,如果非 MacMIME 格式部分的 MIME Content-type: 标题中包含 X-MAC-TYPEX-MAC-CREATOR 参数,则 BinhexMacbinary 关键字还可以请求将该部分转换成指定的格式。CHARSET-CONVERSION 关键字 Block 通知 MTA 仅从 MacMIME 格式部分中提取数据部分,放弃资源部分(由于这样做会丢失信息,因此通常最好使用 Appledouble)。

例如,下面的 CHARSET-CONVERSION 表将通知 MTA 在传送到 VMS MAIL 邮箱或 GroupWise 邮局时转换为 Appledouble 格式,在传送到邮件路由器通道时转换为 Macbinary 格式:

CHARSET-CONVERSION
   IN-CHAN=*;OUT-CHAN=l;CONVERT              Appledouble 
   IN-CHAN=*;OUT-CHAN=wpo_local;CONVERT      Appledouble 
   IN-CHAN=*;OUT-CHAN=tcp_internal;CONVERT   Macbinary

转换成 Appledouble 格式仅应用于已经是 MacMIME 格式之一的部分。转换成 Macbinary 格式仅应用于已经是 MacMIME 格式之一的部分,或 MIME Content-type: 标题上包含 X-MAC-TYPE 和 X-MAC-CREATOR 参数的非 MacMIME 部分。

转换为 Appledouble 或 Block 格式时,可以使用 MAC-TO-MIME-CONTENT-TYPES 映射表指明要放到 Appledouble 部分或 Block 部分的数据部分中的特定 MIME 标签,具体情况取决于原始 Macintosh 文件中的 Macintosh 生成器和 Macintosh 类型信息。此表的探测形式为 format|type|creator|filename。其中 format 为 SINGLE、BINHEX 或 MACBINARY 之一,type 和 creator 分别为十六进制的 Macintosh 类型和 Macintosh 生成器信息,filename 为文件名。

例如,要在向 ims-ms 通道发送时转换成 Appledouble,并在转换时将特定的 MIME 标签用于从 MACBINARY 或 BINHEX 部分转换而来的所有 MS Word 或 PostScript 文档,则正确的表会是:


CHARSET-CONVERSION 

  IN-CHAN=*;OUT-CHAN=ims-ms;CONVERT     Appledouble


MAC-TO-MIME-CONTENT-TYPES 

! PostScript 
    MACBINARY|45505346|76677264|*     APPLICATION/POSTSCRIPT$Y 
    BINHEX|45505346|76677264|*        APPLICATION/POSTSCRIPT$Y 
! Microsoft Word 
    MACBINARY|5744424E|4D535744|*     APPLICATION/MSWORD$Y 
    BINHEX|5744424E|4D535744|*        APPLICATION/MSWORD$Y

请注意,要执行指定的标记,必须在映射条目的模板(右侧)中设置 $Y 标志。在 MTA 表格目录的 mac_mappings.sample 文件中可以查看其他类型附件的样例条目。

如果要将非 MacMIME 格式部分转换为 Binhex 或 Macbinary 格式,则需要提供这些部分的 X-MAC-TYPE 和 X-MAC-CREATOR MIME Content-type:参数值。请注意,可以使用 MIME 重新标记功能将这些参数强制放入邮件部分(否则邮件部分中将没有这些参数)。