上一页    目录    索引    下一页
iPlanet Messaging Server 5.2 管理员指南

第 9 篇 使用预定义通道


在第一次安装 iPlanet Messaging Server 时,一些通道已经定义(参见表 9-1)。本章说明如何在 MTA 中使用预定义通道的定义。

如果尚未阅读第 6 篇 “关于 MTA 服务与配置”,请在阅读后再回到本章内容。有关在 imta.cnf 文件中配置重写规则方面的信息,请参阅第 7 篇 “配置重写规则”

本章包括以下各节:


使用管道通道传递邮件到程序

用户可能希望将来件发往一个程序而不是他们的邮箱。例如,用户可能希望将来件发往邮件分类程序或发往类似于 Vacation Notice(休假通知)这样的自动回复代理程序。这种 pipe 通道使用针对每位用户的站点提供的程序来执行邮件传递。

为了便于程序传递,必须首先注册需要使用的程序,以便 pipe 通道调用。请用实用程序 imsimta program 进行程序注册。该实用程序对每一个注册的、可被 pipe 通道调用的命令赋予一个唯一的名字。然后最终用户就可以将该程序名作为其 mailprogramdeliveryinfo 的 LDAP 属性的值。

例如,要添加 UNIX 命令 myprocmail 作为能够被用户调用的程序,应该首先使用实用程序 imsimta program 来注册该命令,如下例所示。此例注册了一个名为 myprocmail 的程序;该程序以参数 -d username 执行程序 procmail 并作为用户而执行:

imsimta program -a -m myprocmail -p procmail -g "-d %s" -e user

请确保可执行程序位于 programs 目录 - server-instance/imta/programs - 并且执行许可设置为“others”。

为了使用户能访问此程序,该用户的 LDAP 条目中必须包含下列属性和值:

maildeliveryoption:program
mailprogramdeliveryinfo: myprocmail

有关实用程序 imsimta program 的更多信息,请参阅 iPlanet Messaging Server Reference Manual

备用传递程序必须符合以下退出码和命令行参数限制:

退出码限制。pipe 通道调用的传递程序必须返回含义确切的错误代码,以便通道得知是否将邮件出队、递交后续处理或退回邮件。

如果子进程以退出码 0 退出(EX_OK),即认为邮件已经成功传递并且从 MTA 队列中删除。如果以退出码 71、74、75 或 79(EX_OSERREX_IOERREX_TEMPFAILEX_DB)退出,即认为发生了临时错误并且邮件的传递被延迟。如果返回任何其他退出码,即认为邮件无法传递并将退回给发件人。这些退出码已在系统主文件 sysexits.h 中定义。

命令行参数。传递程序可以带有任意个固定参数以及可变参数,%s,代表用户执行之程序的用户名,或代表程序的用户名 + 域名(由邮局管理员“inetmail”执行)。例如,下列命令行使用程序 procmail 传递一封收件人的邮件:

/usr/lib/procmail -d %s


配置本机(/var/mail)通道



您可通过一个选项文件控制本机通道的各种不同特性。此本机通道选项文件必须存储于 MTA 的配置目录并且命名为 native_option(例如,server_root/msg-instance/imta/config/native_option)。

选项文件包含若干行,每一行包含一个选项的设置信息。选项设置格式为:

option=value

value 根据选项的要求可以是一个字符串或是一个整数。

表 9-2 本地通道选项  


选项

说明

FORCE_CONTENT_LENGTH

(0 或 1,仅限 UNIX 使用)

如果 FORCE_CONTENT_LENGTH=1,则 MTA 添加一个 Content-length: 标题行至传递到本机通道的邮件,使得通道在“Form”位于行首时不使用“>From”语法。这使本地 UNIX 邮件与 Sun 公司的新邮件工具兼容,但存在潜在的与其它 UNIX 邮件工具不兼容的问题。

FORWARD_FORMAT (字符串)

指定用户的 .forward 文件的位置。字符串 %u 的位置用每个用户 ID 取代。字符串 %h 的位置用每个用户的主目录替代。如果此选项未明确指定,则默认行为对应于:

FORWARD_FORMAT=%h/.forward

REPEAT_COUNT (整数)
SLEEP_TIME (整数)

当 MTA 试图传递新邮件时,如果用户的邮件文件被阻塞,这些选项提供了控制本机通道程序尝试重试的次数和频率的方法。如果在指定的重试操作次数之后文件仍未打开,则邮件继续保留在本机队列中,在下一次本机通道运行时再将此邮件作为新邮件传递。

REPEAT_COUNT 选项用于控制在放弃之前通道程序尝试打开文件的次数。REPEAT_COUNT 的默认值为 30(尝试 30 次)。

SLEEP_TIME 选项控制两次尝试之间间隔的秒数。SLEEP_TIME 的默认值为 2(两次重试之间间隔 2 秒)。

SHELL_TIMEOUT (整数)

控制通道在一 .forward 中等待一用户外壳命令的完成的时间长度,以秒为单位。在超时的情况下,邮件退回给原发送者并带有类似这样的出错信息“Time-out waiting for user's shell command command to complete”。默认值为 600(10 分钟)。

SHELL_TMPDIR (特定目录)

控制在当传递到一个外壳命令时本地通道创建临时文件的位置。默认情况下,这样的临时文件创建在用户的主目录。使用此选项,管理员可选择将临时文件建立在其它(单个)目录中。例如:

SHELL_TMPDIR=/tmp


使用保存通道临时保存邮件



保存通道用来保存被临时停止接收新邮件之收件人的邮件。停止接收邮件可能是由于正在修改用户名或收件人邮箱正在从一邮件主机(域)移向另一邮件主机。也可能还有其他原因导致用户临时被停止接收邮件,但这些最为常见。

通过将一个用户的 maildeliveryoption 值之一设置为 hold,邮件即可放置在保存通道中。maildeliveryoption 的所有其他的值将被忽略(maildeliveryoption 是一个多值属性),发往用户的邮件即路由到保存通道中。

与大多数通道不同的是,保存通道的主程序没有配置为自动运行。排入保存通道队列中的邮件将保持不动,直到管理员调用 hold_master 程序为止。


转换通道



conversion 通道可用于对流经 MTA 的指定邮件执行任意的正文部分到正文部分的处理。(注意:一个正文部分与一个邮件不同之处在于,一邮件可包含多个正文部分,例如,在一个附件中。)这种处理可由任意站点提供的程序或命令程序完成,而且可执行象这样的处理:将一种文本或图象格式转换为另一种文本或图象格式,病毒扫描,语言翻译等等。从流经 MTA 的邮件中选择各种类型的邮件进行转换,并且可以为每一种类型的邮件正文指定一组特定的进程或程序。

使用本章说明的先决条件是要理解通道的概念(请参见“通道”)。有关使用 conversion 通道进行病毒扫描的补充信息,请查阅在 iPlanet Messaging Server Documentation 站点底部的 iPlanet Messaging Server Technical Notes

转换通道的执行过程包括 A)选择需处理的邮件流量;B)确定如何处理不同的邮件。这些步骤将在后面做更详细的讨论。


备注: MTA 配置文件(imta.cnf)可自动建立默认的转换通道。这个通道可直接使用,无需任何修改。




MIME 概要

转换通道广泛使用 MIME(多用途 Internet 邮件扩充协议)标题行。用户需对邮件结构和 MIME 标题段有一定的了解。有关 MIME 的完整信息,请查阅 RFC 180620452049 以及 2183。为方便起见,这里给出关于 MIME 的简短概述。


邮件结构

一个简单的邮件由一个标题和一段正文组成。标题位于邮件的顶端包含一些如日期,主题,发件人和收件人等控制信息。在标题下第一个空行的后面是正文。MIME 规定了一种构造更复杂邮件的方法,这个方法使邮件可包含多个正文部分,甚至一个正文部分可以嵌套在另一个正文部分中。象这样的邮件称之为“multi-part”邮件,并且,如前面提到的,转换通道执行正文部分到正文部分的处理。


MIME 标题

MIME 规范为各种正文部分定义了一套标题行。它们包含了 MIME-VersionContent-typeContent-Transfer-EncodingContent-IDContent-dispositionContent-typeContent-disposition 是转换通道最常用的邮件头。含有若干 MIME 标题行的例子如下所示:

Content-type: APPLICATION/wordperfect5.1;name=Poem.wpc
Content-transfer-encoding: BASE64
Content-disposition: attachment; filename=Poem.wpc
Content-description: "Project documentation Draft1 wordperfect format"


Content-type(内容类型)标题
MIME Content-Type 标题描述了正文部分的内容。Content-Type 标题格式(加实例)如下所示:

Content-type: type/subtype; parameter1=value; parameter2=value...

type(类型)描述了正文部分内容的类型。类型的例子有 TextMultipartMessageApplicationImageAudioVideo

subtype(子类型)更进一步描述内容的类型。每一种 Content-type 都有它自己的子类型设置。例如:text/plainapplication/octet-streamimage/jpeg。MIME 邮件的内容子类型由 IANA(因特网编号授权委员会)指定和开列。列表副本请见:
http://www.isi.edu/in-notes/iana/assignments/media-types/media-types

parameter(参数)是针对每个特定的 Content-type/subtype 对的。例如,charsetname 参数如下所示:

Content-type: text/plain; charset=us-ascii
Content-type: application/msword; name=temp.doc

这里的 charset 参数用于指定文本邮件的字符集。如果数据要写入某个文件,这里的 name 参数给出一个建议的文件名。

备注: Content-Type 值,subtypes 和参数名都是不区分大小写的。




Content-disposition(内容配置)标题
MIME Content-disposition 标题为正文部分提供信息表示的方法。这些显示信息常被加到附件中,用以指定附件正文部分是否要显示(inline),或是当作要复制文件的文件名显示(attachment)。Content-disposition 标题格式如下:

Content-disposition: disposition_type; parameter1=value;parameter2=value...

disposition_type 通常是 inline(显示正文部分)或 attachment(以要保存的文件形式显示)。Attachment 通常有参数文件名和一个值,用以为保存的文件指定一个建议的名字。

关于 Content-disposition 标题的详细信息,请查阅 RFC 2183。


选定转换处理流量

与其它 MTA 通道不同,转换通道不是象通常那样在一个地址或 MTA 重写规则中指定。取而代之的是,邮件是用 CONVERSIONS 映射表(由 imta_tailor 文件中的参数 IMTA_MAPPING_FILE 指定)而被发送到转换通道的。表条目格式如下:

IN-CHAN=source-channel;OUT-CHAN=destination-channel;CONVERT Yes/No

MTA 处理每个邮件时要探查 CONVERSIONS 映射表(如果映射表已给出)。如果 source-channel(源通道)是邮件进入的通道并且 destination-channel(目标通道)是外发邮件的通道,则在 CONVERT 后执行(Yes 意味着 MTA 将邮件从其 destination-channel 转移到转换通道;如果没找到匹配项,邮件将入队到常规的目标通道)。

备注: 形如 user@conversion.localhostnameuser@conversion 的地址将经由转换通道路由,而不管 CONVERSIONS 的映射表是何种状态。



下面的例子将所有的非内部邮件(起源于或去往 Internet 的邮件)路由到转换通道。

CONVERSIONS

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

第一行指定来自 tcp_local 通道的邮件将被处理。第二指定去往 tcp_local 通道的邮件也将被处理。tcp_local 通道处理所有去往或来自于 Internet 的邮件。由于默认的是不通过转换通道,因而任何其它邮件都将不通过转换通道。

注意这是最基本的表,对于一个要使用更多定制配制的站点来说可能是不够的,例如,使用多重出站到 Internet 的 tcp_* 通道,或使用多重入站自 Internet 的 tcp_* 通道。


控制转换处理

当一个邮件发送到转换通道时,系统将按正文部分到正文部分的方式对其进行处理。处理由 MTA conversions 文件控制,该文件是由在 imta_tailor 文件中的 IMTA_CONVERSION_FILE 选项指定的(默认值为:server_root/msg-instance/imta/conversions)。该 conversions 文件包含一些条目,用来控制要处理什么类型的正文部分以及如何进行处理。

每一个条目包含一行或多行,每行包含一个或多个 name=value 参数子句。这些参数子句中的 value 符合 MIME 约定。除最后一行外,每行必须以分号(;)结尾。该文件中的物理行被限制在 252 个字符以内。可用反斜线(\)续行符号将一个逻辑行分为多个物理行。条目要么由一个以非分号结尾的行终止,要么由一个或多个空白行终止,也可以两种情况同时出现。

下面是一个简单的 conversion 文件条目的例子:

范例 9-1 conversion 文件条目

out-chan=ims-ms; in-type=application; in-subtype=wordperfect5.1;
  out-type=application; out-subtype=msword; out-mode=block;
  command="/usr/bin/convert -in=wordp -out=msword 'INPUT_FILE' \
'OUTPUT_FILE'"



子句 out-chan=ims-ms; in-type=application; in-subtype=wordperfect5.1 限定正文部分。即指定了要转换部分的类型。每一部分的标题被读取并抽取其中的 Content-Type: 和其它的标题信息。在 conversion 中的条目然后从第一条到最后一条被顺序扫描;任何给出的 in-* 参数,以及 OUT-CHAN 参数,如果给出,均予以检查。如果所有这些参数与正被处理的正文部分的相应信息相匹配,则执行 command=delete= 子句所指定的转换,并且设置 out-* 参数。

如果没有匹配项,该部分就与下一个 conversions 文件条目进行匹配。一旦正文部分全部被扫描和处理(假设有一个合格的匹配),则将邮件向前发送到下一个通道。如果没有匹配项,则无处理,邮件被发送到下一个通道。

out-chan=ims-ms 指定只有发往 ims-ms 通道的邮件部分将被转换。in-type=applicationin-subtype=wordperfect5.1 指定 MIME Content-type 邮件的标题部分必须是 application/wordperfect5.1

通过额外的 in-* 参数可进一步限定邮件部分。(参阅表 9-5。)上面的条目将引发针对一邮件部分的转换,该邮件具有下列 MIME 标题行:

Content-type: APPLICATION/wordperfect5.1;name=Draft1.wpc
Content-transfer-encoding: BASE64
Content-disposition: attachment; filename=Draft1.wpc
Content-description: "Project documentation Draft1 wordperfect format"

范例 9-1 中的三个 conversion 文件限定参数的后面,有另两个参数,out-type=applicationout-subtype=msword,指定用置换的 MIME 标题行附加于“已处理”的正文部分。out-type=applicationout-subtype=msword 指定:外发邮件的 MIME Content-type/subtypeapplication/msword

注意,既然 in-typeout-type 两参数是相同的,out-type=application 则不是非有不可,因为转换通道对外发正文部分默认采用原始 MIME 标签。通过额外的输出参数还可以为外发正文部分指定额外的 MIME 标签。

out-mode=block范例 9-1)可指定站点提供的程序将返回的文件的类型。换句话说,它指定文件如何存储及转换通道,并如何在返回的文件中回读。例如,一个 html 文件存为文本模式,而一个 .exe 程序文件或 zip 文件则存为块/二进制文件模式。模式是一种描述方法,它表明被读取文件所具有的特定存储格式。

范例 9-1 中的最后参数:

command="/usr/bin/convert -in=wordp -out=msword 'INPUT_FILE' 'OUTPUT_FILE'"

指定对正文部分要采取的操作。参数 command= 指定一个将针对正文部分执行的程序。/usr/bin/convert 是假设的命令名;-in=wordp-out=msword 是假设的用来指定输出文本和输入文本格式的命令行参数;INPUT_FILEOUTPUT_FILE 是转换通道环境参数(参阅“使用转换通道环境变量”)用来指定一个包含原始正文部分的文件和一个程序将变换后的正文部分存储于其中的文件。

与执行一个针对正文部分的命令不同,邮件部分可通过用 DELETE=1 取代 command 参数而简单地加以删除。


转换通道信息流

信息的流动如下所示:包含正文部分的邮件进入转换通道。转换通道分析邮件,并逐个处理各个部分。转换通道限定正文部分,换句话说,转换通道通过将 MIME 标题行与限定参数进行比较,确定正文部分是否应加以处理。如果正文部分符合要求,则开始进行转换处理。如果 MIME 或正文部分信息须传递给转换脚本,则如信息传递参数所指定的那样被存储在一个环境变量(表 9-3)中。

此时,由操作参数指定的一个针对正文部分的操作被执行。典型的操作是正文部分被删除或被传递给一个包装在脚本中的程序。脚本处理正文部分随后将它发送回转换通道以便重新装配而成为处理后邮件。脚本也能使用转换通道的 output options 发送信息到转换通道。这样的信息可能是:添加到输出正文部分的新 MIME 标题行,返回给邮件发送者的出错信息文本,指示 MTA 起动一些如退回、删除、保存邮件之类操作的专用指令等。

最后,转换通道为输出参数所指定的正文部分替换标题行。


使用转换通道环境变量

当对正文部分进行操作时,将 MIME 标题行信息,或全部正文部分,传递到或取自站点提供的程序,通常是有用的。例如,一个程序可能需要 Content-typeContent-disposition 标题行信息以及一邮件的正文部分。通常一个站点提供的程序的主输入是从一个文件读出的一邮件的正文部分。在正文部分处理之后,此程序需要将正文部分写到一个以后能被转换通道读取的文件中。这样的信息传递是通过使用转换通道的环境变量实现的。

建立环境变量可以在 conversions 文件中使用 parameter-symbol-* 参数创建,也可以使用一组预定义的转换通道环境变量(请参阅表 9-4)。

下列 conversions 文件条目和进入的标题显示如何使用环境变量将 MIME 信息传递到站点提供的应用程序。

conversions 文件条目:

in-channel=*; in-type=application; in-subtype=*;
  parameter-symbol-0=APPARENT_NAME; parameter-copy-0=*;
  dparameter-symbol-0=APPARENT_FILENAME; dparameter-copy-0=*;
  message-header-file=2; original-header-file=1;
  override-header-file=1; override-option-file=1;
  command="/bin/viro-scan500.sh 'INPUT_FILE' 'OUTPUT_FILE'"

入站邮件报头:

Content-type: APPLICATION/msword; name=Draft1.doc
Content-transfer-encoding: BASE64
Content-disposition: attachment; filename=Draft1.doc
Content-description: "Project documentation Draft1 msword format"

in-channel=*; in-type=application; in-subtype=* 指定:一个来自类型为 application 的任意输入通道的邮件正文部分将被处理。

parameter-symbol-0=APPARENT_NAME 指定:第一个 Content-type 参数值(如此例中的 Draft1.doc)被存储在一个称为 APPARENT_NAME 的环境变量中。

parameter-copy-0=* 指定:输入正文部分的所有 Content-type 参数被复制到输出正文部分。

dparameter-symbol-0=APPARENT_FILENAME 指定:第一个 Content-disposition 参数值(如此例中的 Draft1.doc)被存储在一个称为 APPARENT_FILENAME 的环境变量中。

dparameter-copy-0=* 指定:输入正文部分的所有 Content-disposition 参数被复制到输出正文部分。

message-header-file=2 指定:原始邮件的标题作为一个整体(最外层的标题)写入环境变量 MESSAGE_HEADERS 所指定的文件中。

original-header-file=1 指定:包括在 MESSAGE/RFC822 部分的原始标题写入环境变量 INPUT_HEADERS 所指定的文件中。

override-header-file=1 指定:MIME 标题从环境变量 OUTPUT_HEADERS 所指定的文件中读出,优先于包括在 MIME 部分中的原始标题。$OUTPUT_HEADERS 是一个在转换运行时建立的随时会消失的临时文件。一个站点提供的程序将使用这个文件存储在转换过程中改变了的标题。转换通道在重新装配正文部分时会从这个文件读取标题行。

override-option-file=1 指定:转换通道从环境变量 OUTPUT_OPTIONS 所指定的文件读取转换通道选项。请参阅“使用转换通道输出选项”

command="SERVER_ROOT/msg-INSTANCE/bin/viro-scan500.sh" 指定针对邮件正文部分执行的命令。


表 9-3 转换通道环境变量 


环境变量

说明

INPUT_ENCODING

正文部分原有的编码。

INPUT_FILE

包含原始正文部分的文件的名称。站点提供的程序将读取这个文件。

INPUT_HEADERS

包含正文部分的原始标题行的文件的名称。站点提供的程序将读取这个文件。

INPUT_TYPE

输入邮件部分的 MIME Content-type

INPUT_SUBTYPE

输入邮件部分的 MIME 内容子类型。

INPUT_DESCRIPTION

输入邮件部分的 MIME content-description

INPUT_DISPOSITION

输入邮件部分的 MIME content-disposition

MESSAGE_HEADERS

包含一附加邮件(不仅仅是正文部分)的原始最外层标题或部分中直接附加 MESSAGE/RFC822 部分的标题的文件的名称。站点提供的程序将读取这个文件。

OUTPUT_FILE

文件名称,即站点提供的程序应将其输出存储于其中的文件。站点提供的程序应建立并且写入这个文件。

OUTPUT_HEADERS

文件名称,即站点提供的程序应将附加部分的 MIME 标题行存储于其中的文件。站点提供的程序应建立并且写入这个文件。注意:文件将包含实际的标题行(不是 option=value 行),后随一空行作为其最后一行。

OUTPUT_OPTIONS

文件名称,站点提供的程序将从中读取转换通道选项。请参阅“使用转换通道输出选项”


使用转换通道输出选项

转换通道输出选项(表 9-4)是将信息和专用指令从转换脚本传递到转换通道的动态变量。例如,在正文部分处理过程中,脚本可能要发送一个专用指令让转换通道退回邮件并把一些错误出错信息文本添加到退回邮件中以声明邮件包含病毒。

输出选项的初始化是通过在所需的转换条目中设置 OVERRIDE-OPTION-FILE=1 实现的。此后,输出选项在需要时由脚本设置并存储到环境变量文件 OUTPUT_OPTIONS 中。当脚本完成了对正文部分的处理,转换通道从 OUTPUT_OPTIONS 文件读取选项。

这里的 OUTPUT_OPTION 变量是一个文件名,转换通道即从该文件读取选项。通常它被当作一个随时会消失的临时文件用于传递信息。下面的例子显示脚本使用输出选项给发送病毒的发件人返回的出错讯息。


/usr/local/bin/viro_screen2k $INPUT_FILE # run the virus screener

if [ $? -eq 1 ]; then
   echo "OUTPUT_DIAGNOSTIC='Virus found and deleted.'" > $OUTPUT_OPTIONS
   echo "STATUS=178029946" >> $OUTPUT_OPTIONS
else
   cp $INPUT_FILE $OUTPUT_FILE # Message part is OK
fi

在这个例子中,系统诊信息和状态码将被添加到 $OUTPUT_OPTIONS 所定义的文件中。如果读这个 $OUTPUT_OPTIONS 临时文件,将看到类似这样的内容:

OUTPUT_DIAGNOSTIC="Virus found and deleted."
STATUS=178029946

文本行 OUTPUT_DIAGNOSTIC='Virus found and deleted' 可指示转换通道将文本 Virus found and deleted 添加到邮件中。

178029946 是每个从 server-root/bin/msg/imtasdk/include/pmdf_err.h 找到的 pmdf_err.h 文件的 PMDF__FORCERETURN 状态。这个状态码指示转换通道将邮件退回给发送者。(有关使用专用指令的详细说明,请参阅“用转换通道输出退回、删除或保存邮件”。)

完整的输出选项列表如下所示。

表 9-4 转换通道输出选项


选项

说明

OUTPUT_TYPE

输出邮件部分的 MIME 内容类型。

OUTPUT_SUBTYPE

输出邮件部分的 MIME 内容子类型。

OUTPUT_DESCRIPTION

输出邮件部分的 MIME 内容说明。

OUTPUT_DIAGNOSTIC

在一邮件被转换通道强制退回时,作为发送给发送者邮件一部分的而包含的文本。

OUTPUT_DISPOSITION

输出邮件部分的 MIME content-disposition

OUTPUT_ENCODING

需在输出邮件部分使用的 MIME 内容传输编码。

OUTPUT_MODE

转换通道用于写输出邮件部分的 MIME 模式,这同时也是收件人读取输出邮件部分所用的模式。

STATUS

转换器的退出状态。这通常是转换通道起动某个操作的专用指令。完整的指令列表位于 server-root/bin/msg/imtasdk/include/pmdf_err.h


附加在 MESSAGE/RFC822 部分中的报头

在对邮件部分执行转换操作时,转换通道可使用附加的 MESSAGE/RFC822 部分中的标题,如果没有附加 MESSAGE/RFC822 部分,则使用邮件头。标题中的信息对站点提供的程序是有用的。

如果选中的条目有 ORIGINAL-HEADER-FILE=1,则附加的 MESSAGE/RFC822 部分的所有标题行被写入环境变量 OUTPUT_HEADERS 所描述的文件。如果是 OVERRIDE-HEADER-FILE=1,则转换通道将把环境变量 OUTPUT_HEADERS 所描述文件的内容作为该附加部分上的标题而读取和使用。


从转换条目调用映射表

out-parameter-* 值可以在任意命名的映射表中存储和检索。如果客户机对所发送的全部附件使用一个如 att.dat 这样的总名称,而不管它们是否是 postscriptmswordtext 或其他任何格式,则上述特性对更改客户机传送来的附件的名称很有用。这是一个重新标注“部分”的基本方法,可使其它客户程序(如 Outlook)能够通过读取扩展名而打开“部分”。

从映射表检索参数值的语法如下:

'mapping-table-name:mapping-input[$Y, $N]'

$Y 返回一个参数值。如果没有匹配的值或返回 $N,则忽略转换文件条目中的那个参数,或作为空串处理。缺少匹配值或 $N 并不会导致转换条目自身中止。

考虑下面的映射表:

X-ATT-NAMES

   postscript       temp.PS$Y
   wordperfect5.1   temp.WPC$Y
   msword           temp.DOC$Y

根据上述映射表转换下列条目可将附件中的指定文件名替换为一般文件名:

out-chan=tcp_local; in-type=application; in-subtype=*;
   in-parameter-name-0=name; in-parameter-value-0=*;
   out-type=application; out-subtype='INPUT-SUBTYPE';
   out-parameter-name-0=name;
   out-parameter-value-0="'X-ATT-NAMES:\\'INPUT_SUBTYPE\\''";
   command="cp  'INPUT_FILE'  'OUTPUT_FILE'"

在上面的例子中,out-chan=tcp_local; in-type=application; in-subtype=* 指定:要处理的邮件必须来自 tcp_local 通道并带有 application/*(* 表示任何子类型都可以)的 content-type 标题。

in-parameter-name-0=name; in-parameter-value-0=* 进一步指定:邮件必须以 name=*(同样,此处的 * 表示任何参数值均可)为其第一参数类型。

out-type=application; 指定:处理后邮件的 MIME Content-type 参数是 application

out-subtype='INPUT-SUBTYPE'; 指定:处理后正文部分的 MIME subtype 参数是环境变量 INPUT-SUBTYPE,此环境变量是输入 subtype 的原值。因此,如果想将

   Content-type: application/xxxx; name=foo.doc

    改变为

   Content-type: application/msword; name=foo.doc

   则应使用

   out-type=application; out-subtype=msword

out-parameter-name-0=name; 指定:输出正文部分的第一 MIME Content-type 参数具有 name= 类型。

out-parameter-value-0='X-ATT-NAMES:\\'INPUT_SUBTYPE\\''; 用于指示要提取的第一个 MIME subtype 参数值并搜索映射表 X-ATT-NAMES 以寻找一个 subtype 匹配。如果找到匹配项,name 参数就会接收到一个在 X-ATT-NAMES 映射表中指定的新值。因此,如果参数类型是 mswordname 参数将是 temp.DOC


用转换通道输出退回、删除或保存邮件

本节记述如何使用转换通道选项退回,删除或保存邮件。基本过程如下:

  1. 在适当的转换文件条目中设置 OVERRIDE-OPTION-FILE=1。此设置将指示转换通道从 OUTPUT_OPTIONS 文件读取输出选项。

  2. 然后用转换脚本确定特定邮件正文部分需要进行何种操作。

  3. 在脚本中,通过在 OUTPUT_OPTIONS 文件中写入 STATUS=directive_code 选项来指定专用指令。

完整的专用指令列表位于 server_root/bin/msg/imtasdk/include/pmdf_err.h。转换通道经常使用的有:
名字

十六进制值

十进制值

PMDF__FORCEHOLD

0x0A9C86AA

178030250

PMDF__FORCERETURN

0x0A9C857A

178029946

PMDF__FORCEDELETE

0x0A9C8662

178030178

我们将用例子解释这些指令的功能。


退回邮件

要用转换通道退回邮件,在适当的 conversions 文件条目设置 OVERRIDE-OPTION-FILE=1 并在转换脚本中添加下面这一行:

   echo "STATUS=178029946" >> $OUTPUT_OPTIONS

如果希望添加一短文本串到退回邮件中,在转换脚本中添加下面这一行:

   echo OUTPUT_DIAGNOSTIC=文本串 >> $OUTPUT_OPTIONS

这里的“文本串”类似于:"The message sent from your machine contained a virus which has been removed.Be careful about executing email attachments."


有条件地删除邮件部分

依据所包含的内容有条件地删除部分可能是有用的。使用输出选项设置即可做到这一点。相比之下,DELETE=1 转换参数子句则是无条件地删除邮件部分。

若需通过输出选项删除邮件部分,请在适当的转换文件条目中设置 OVERRIDE-OPTION-FILE=1 并在转换脚本中添加下面这一行:

   echo "STATUS=178030178" >> $OUTPUT_OPTIONS


保存邮件

依据所包含的内容有条件地保存部分可能是有用的。要使用输出选项删除一邮件部分,在适当的转换文件条目中设置 OVERRIDE-OPTION-FILE=1 并在转换脚本中添加下面这一行:

   echo "STATUS=178030250" >> $OUTPUT_OPTIONS

这就要求转换通道以转换通道队列中的一个 .HELD 文件的形式保存邮件。


转换通道范例

下面例子中的 CONVERSIONS 映射和转换规则集可使 GIF、JPEG 和 BITMAP 文件发送到假想通道 tcp_docuprint,然后自动转换为 PostScript。这些转换中有几个使用假想的 /usr/bin/ps-converter.sh 实现转换。其中还包含一附加规则,用于将 WordPerfect 5.1 文件转换为 Microsoft Word 文件。


CONVERSIONS

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


!
out-chan=ims-ms; in-type=application; in-subtype=wordperfect5.1;
  out-type=application; out-subtype=msword; out-mode=block;
  command="/bin/doc-convert -in=wp -out=msw   'INPUT_FILE'  'OUTPUT_FILE'"

out-chan=tcp_docuprint; in-type=image; in-subtype=gif;
  out-type=application; out-subtype=postscript; out-mode=text;
  command="/bin/ps-convert -in=gif -out=ps   'INPUT_FILE'  'OUTPUT_FILE'"

out-chan=tcp_docuprint; in-type=image; in-subtype=jpeg;
  out-type=application; out-subtype=postscript; out-mode=text;
  command="/bin/ps-convert -in=jpeg -out=ps   'INPUT_FILE'  'OUTPUT_FILE'"

out-chan=tcp_docuprint; in-type=image; in-subtype=bitmap;
  out-type=application; out-subtype=postscript; out-mode=text;
  command="/bin/ps-convert -in=bmp -out=ps   'INPUT_FILE'  'OUTPUT_FILE'"



表 9-5 转换参数  


参数

说明

限定参数(指定这样的参数:在转换之前必须与邮件匹配。)

OUT-CHAN,
OUT-CHANNEL

输出通道,以匹配转换(允许使用通配符)。此条目指定的转换只有在邮件是发往此指定通道的情况下才执行。

IN-CHAN,
IN-CHANNEL

输入通道,以匹配转换(允许使用通配符)。此条目指定的转换只有在邮件是来自此指定通道的情况下才执行。

IN-TYPE

输入 MIME 类型,以匹配转换(允许使用通配符)。指定的转换只有在此字段与正文部分的 MIME 类型相匹配的情况下才执行。

IN-SUBTYPE

输入 MIME 子类型,以匹配转换(允许使用通配符)。此条目指定的转换只有在此字段与正文部分的 MIME 子类型相匹配的情况下才执行。

IN-PARAMETER-NAME-n

输入必须与转换相匹配的 MIME Content-Type 参数名;n = 0, 1, 2.... 这个参数可与 IN-PARAMETER-VALUE-n 一起使用以便通过其名称和所具有的值明确识别一个参数。

IN-PARAMETER-VALUE-n

输入必须与转换相匹配的对应于 IN-PARAMETER-NAME 的 MIME Content-Type 参数值。此条目指定的转换只有在此字段与正文部分的 Content-Type 参数列表中的对应参数相匹配的情况下才被执行。允许使用通配符。

IN-PARAMETER-DEFAULT-n

在没有提供参数情况下输入 MIME Content-Type 默认参数值。当正文部分没有指定这样的参数时,这个值被当作默认值用于 IN-PARAMETER-VALUE-n 测试。

IN-DISPOSITION

输入 MIME Content-Disposition 以匹配转换。

IN-DPARAMETER-NAME-n

输入必须与转换相匹配的 MIME Content-Disposition 参数名;n = 0, 1, 2.... 这个参数可与 IN-DPARAMETER-VALUE-n 一起使用,以便通过其名称和所具有的值明确识别一个参数。

IN-DPARAMETER-VALUE-n

输入必须与转换相匹配的对应于 IN-PARAMETER-NAME 的 MIME Content- Disposition 参数值。通过此条目指定的转换只有在此字段与正文部分的 Content-Disposition: 参数列表中的对应参数相匹配的情况下才被执行。允许使用通配符。

IN-DPARAMETER-DEFAULT-n

在没有提供参数情况下输入 MIME Content-Disposition 默认参数值。当正文部分没有指定这样的参数时,这个值被当作默认值用于 IN-DPARAMETER-VALUE-n 测试。

IN-DESCRIPTION

输入 MIME Content-Description 以匹配转换。

IN-SUBJECT

输入来自 MESSAGE/RFC822 部分的主题。

输出参数(用于指定正文部分转换后的输出设置。)

OUT-TYPE

如果与输入类型不同则输出 MIME 类型。

OUT-SUBTYPE

如果与输入类型不同则输出 MIME 子类型。

OUT-PARAMETER-NAME-n

输出 MIME Content-Type 参数名; n = 0, 1, 2...

OUT-PARAMETER-VALUE-n

输出对应于 OUT-PARAMETER-NAME-n 的 MIME Content-Type 参数值。

PARAMETER-COPY-n

一个要从输入正文部分的 Content-Type 参数列表复制到输出正文部分的 Content-Type: 参数列表的 Content-Type 参数的列表;n=0, 1, 2... 使用与 MIME 参数相同的名字去复制,如 IN-PARAMETER-NAME-n 子句所匹配的那样。

OUT-DISPOSITION

如果与输入 MIME Content-Disposition 不同,就输出 MIME Content-Disposition

OUT-DPARAMETER-NAME-n

输出 MIME Content-Disposition 参数名;n=0, 1, 2...

OUT-DPARAMETER-VALUE-n

输出对应于 OUT-DPARAMETER-NAME-n 的 MIME Content-Disposition 参数值。

DPARAMETER-COPY-n

一个要从输入正文部分的 Content-Disposition: 参数列表复制到输出正文部分的 Content-Disposition: 参数列表的 Content-Disposition: 参数的列表。n = 0, 1, 2,... 取要复制的 MIME 参数的名称作为参数,如 IN-PARAMETER-NAME-n 子句所匹配的那样。在参数中可以使用通配符。特别是,参数 * 意味着复制全部原始 Content-Disposition: 参数。

OUT-DESCRIPTION

如果与输入 MIME Content-Description 不同,就输出 MIME Content-Description

OUT-MODE

读取和存储已转换文件的模式。这应是 BLOCK(二进制文件和可执行文件)或 TEXT

OUT-ENCODING

在邮件重新装配时应用于转换文件的编码。

操作参数(指定一个针对邮件部分的操作。)

COMMAND

实施转换而执行的命令。实施转换而执行的命令。这个参数是必须的;如果没有指定命令,此条目被忽略。

DELETE

0 或 1。如果设置了这个标志,则删除邮件部分。(如果这是邮件中唯一的部分,则被一个空的文本部分取代。)

RELABEL

RELABEL=1 将按输出参数的指定重新标注 MIME 标签。Relabel=0 则什么都不做。通常对错误标注的部分进行重新标注(例如:从 Content-type:application/octet-streamContent-type:application/msword)于是用户可以通过“双击”打开一个部分,而不必将此部分保存到一个文件并用一个程序打开它。

SERVICE-COMMAND

SERVICE-COMMAND=command 将执行一个站点提供的作用于整个 MIME 邮件(MIME 标题和内容正文部分)的程序。同样,与其他 CHARSET-CONVERSION 操作或转换通道操作不同的是,服务命令需由自己完成 MIME 分解、解码、重编码和重新组装。请注意,这个标志在转换通道处理时导致一个条目被忽略,而 SERVICE-COMMAND 条目却在字符集转换处理时被执行。

TAG

输入标记,由邮件列表 CONVERSION_TAG 参数设置。

信息传递参数(用于与站点提供的程序之间传递信息。)

DPARAMETER-SYMBOL-n

用于存储 Content-disposition 参数值(如果已提供)的环境变量;n = 0, 1, 2,... 每个 DPARAMETER-SYMBOL-n 顺序取自 Content-Disposition: 参数列表(n=0 是第一个参数,n=2 是第二个参数,等等。)并在执行站点提供的程序之前放置在指定的环境变量中。

PARAMETER-SYMBOL-n

用于存储 Content- Type 参数值(如果已提供)的环境变量;n = 0, 1, 2... 每个 PARAMETER-SYMBOL-n 顺序取自 Content-Type: 参数列表(n=0 是第一个参数,n=2 是第二个参数,等等。)并在执行站点提供的程序之前放置在同名的环境变量中。取存放 MIME 参数转换结果的变量名作为参数,如 IN-PARAMETER-NAME-n 子句所匹配的那样。

MESSAGE-HEADER-FILE

将一邮件的所有部分,或除原始标题意外的部分,写入到环境变量 MESSAGE_HEADERS 所指定的文件中。如果设置为 1,直接附加正文部分的原始标题被写入到环境变量 MESSAGE_HEADERS 所指定的文件中。如果设置为 2,作为邮件的原始标题作为整体(最外层的邮件标题)被写入到文件。

ORIGINAL-HEADER-FILE

0 或 1。如果设置为 1,附加 MESSAGE/RFC822 部分(不仅是正文部分)的原始标题被写入到环境变量 OUTPUT_HEADERS 描述的文件中。

OVERRIDE-HEADER-FILE

0 或 1。如果设置为 1,则 MIME 标题行通过转换通道从环境变量 OUTPUT_HEADERS 中读取,优先于在附加 MIME 部分中的原始标题行。

OVERRIDE-OPTION-FILE

如果 OVERRIDE-OPTION-FILE=1,转换通道从环境变量 OUTPUT_OPTIONS 中读取选项。

PART-NUMBER

用点分隔的整数:a. b. c...MIME 正文部分的部分号。


字符集转换和邮件重格式化



字符集转换表是 Messaging Server 中最为基础的映射表。该表的名为 CHARSET-CONVERSION。它用于指定可以做哪种类型的通道对通道的字符集转换和邮件重格式化。

在许多系统中没有必要进行字符集转换或邮件重格式化,因此也不需要此表。但,某些情况下必须进行字符集转换。

CHARSET-CONVERSION 映射表也能够用于改变邮件的格式。系统提供了将很多非 MIME 格式转换为 MIME 格式的功能。也可以修改 MIME 的编码和结构。当邮件被传递到只支持 MIME 或 MIME 的某个子集的系统时,须使用这些选项。最后,只提供了少数几种从 MIME 到非 MIME 格式的转换。

MTA用两种不同的方式查找 CHARSET-CONVERSION 映射表。第一种方式的查找用来确定 MTA 是否应该重格式化邮件,若是,应使用什么样的格式化选项。(如果没有指定重格式化,MTA 就无需检查指定的字符集转化了。)第一种查找方式下输入字符串的一般形式为:

IN-CHAN=in-channel;OUT-CHAN=out-channel;CONVERT

这里的 in-channel 为源通道(邮件即来源于该处)的名字,out-channel 为目标通道(邮件即去往该处)的名字。如果发现相匹配的项,结果字符串为用逗号分开的关键字列表。表 9-6 列出了这些关键字。


表 9-6 CHARSET-CONVERSION 映射表关键字


关键字

说明

Always

强制转换,即使邮件在去往 out-channel 之前要通过转换通道。

Appledouble

将其他 MacMIME 格式转换为 Appledouble 格式。

Applesingle

将其他 MacMIME 格式转换为 Applesingle 格式。

BASE64

将 MIME 编码切换为 BASE64。

Binhex

将其他 MacMIME 格式或包含 Macintosh 类型和 Mac 创建者信息的部分转换为 Binhex 格式。

Block

从 MacMIME 格式部分只抽取数据分支。

Bottom

将任意的 message/rfc822 正文部分(已转发邮件)转换为邮件的内容部分和标题部分。

Delete

将任意的 message/rfc822 正文部分(已转发邮件)转换为一个邮件的内容部分,并删除已转发的标题。

Level

删除邮件的多部分级别。

Macbinary

将其他 MacMIME 格式或包含 Macintosh 类型和 Macintosh 创建者信息的部分转换为 Macbinary 格式。

No

禁用转换。

QUOTED-PRINTABLE

将 MIME 编码切换为 QUOTED-PRINTABLE。

Record,Text

文本/无格式部分在 80 个字符处换行。

Record,Text= n

文本/无格式部分在 n 个字符处换行。

RFC1154

将邮件转换为 RFC 1154 格式

Top

将任意的 message/rfc822 正文部分(已转发邮件)转换为标题部分和邮件内容部分。

UUENCODE

将 MIME 编码切换为 X-UUENCODE。

Yes

启用转换。


字符集转换

如果 MTA 查找并发现到邮件要被重格式化,它将进一步检查邮件的每一部分。要查找所有文本部分,它们的字符集参数要用于第二步查找。只有当 MTA 已经核实并发现需要做转换时才执行第二步查找。第二步查找的输入字符串的形式如下所示:

IN-CHAN=in-channel;OUT-CHAN=out-channel;IN-CHARSET=in-char-set

这里的 in-channelout-channel 和以前的含义一样,in-char-set 为与问题中特定部分相关联的字符集的名字。如果第二次查找没有发现匹配项,不执行任何字符集转换(尽管有可能根据第一次查找中匹配的关键字对邮件进行重格式化,例如修改 MIME 结构)。如果有匹配项,将产生如下形式的字符串:

OUT-CHARSET=out-char-set

这里的 out-char-set 指定 in-char-set 要被转换成的哪个字符集的名字。注意,这两个字符集都必须在字符集定义表 charsets.txt 中定义,该表位于 MTA 表目录中。如果没有在此文件中正确定义字符集,则不进行任何转换。这通常不会成为问题,因为此文件定义了几百个字符集,大多数今天常用的字符集在此文件中都已定义。要得到 charsets.txt 文件更进一步的信息,请参阅有关实用程序 imsimta chbuild(UNIX 和 NT)的说明。

如果符合所有的条件,MTA 将着手构建字符集映射表并进行转换。被转换的邮件部分将使用转换后的字符集名字重新标注。


邮件重格式化

如前所述,CHARSET-CONVERSION 映射表也用于影响附件在 MIME 和几个专有邮件格式之间的转换。

下面给出一些其他种类的邮件重格式化例子,CHARSET-CONVERSION 映射表能够影响这些重格式化。


Non-MIME Binary 附件转换

某种非标准(non-MIME)格式邮件,例如某种专有格式的邮件或来自 Microsoft Mail(MSMAIL)SMTP 网关的邮件,当处理这些邮件所涉及到的任何通道都启用 CHARSET-CONVERSION 时,将自动转换为 MIME 格式。如果有一个 tcp_local 通道,则它通常是来自 Microsoft Mail SMTP 网关的邮件的接收通道,以下设置将对传递给本地用户的邮件启用转换功能:

CHARSET-CONVERSION

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

也可换一种方法,即简单地指定 OUT-CHAN=* 来代替 OUT-CHAN=ims-ms 以覆盖每一个通道。但这样做可能为导致邮件处理的额外开销,因为这样做须详细检查所有进入 tcp_local 通道的邮件,而不仅仅局限于那些绑定到特定通道的邮件。

更为重要的是,如此不加区分的转换可能将系统置于难以驾御邮件转换的地步。因为邮件不一定都是自己站点的,有些邮件只是简单地通过系统而已,此时系统仅需起着传输工具的作用就可以了,除了邮件信封和相关传输信息之外没有必要对邮件做任何改变。

要将 MIME 转换为 Microsoft Mail SMTP 网关识别的格式,应在 MTA 配置中为 Microsoft Mail SMTP 网关使用单独的通道,例如 tcp_msmail,并且将以下内容放到映射表文件中:

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 重标注。

例如,如下所示的 CHARSET-CONVERSION 表和 MTA conversions 文件条目的组合将导致一些邮件被重标注:那些到达 tcp_local 通道并且路由到 ims-ms 通道的邮件将重标注为 application/postscript;那些到达时原先的 MIME 标注为 application/octet-stream,但具有扩展名 psmsw 的文件名参数的邮件将重标注为 application/msword。(注意,更为精确的标注应由最初用户代理或网关自己执行。)


字符集转换表

CHARSET-CONVERSION

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



MTA 转换文件条目

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



MacMIME 格式转换

Macintosh 文件有两部分,资源分支包含 Macintosh 的特定信息,数据分支包含可在其他平台上使用的数据。这为传输 Macintosh 文件带来额外的复杂性,因为传输 Macintosh 文件各个部分时通常要使用 4 种不同的格式。这些格式种的三种,Applesingle、Binhex 和 Macbinary 将 Macintosh 资源分支和 Macintosh 数据分支合并编码在一起。第四种格式,Appledouble,是一种多部分格式,资源分支和数据分支位于相互独立的部分中。因此 Appledouble 成为非 Macintosh 平台上最为有用的格式,这种格式能够忽略资源分支,而数据分支则则为非 Macintosh 应用程序所利用。当在特地向 Macintoshes 发送时其他格式可能很有用。

MTA 能够在这些不同 Macintosh 格式间进行转换。CHARSET-CONVERSION 的关键字 AppledoubleApplesingleBinhexMacbinary 通知 MTA 分别将其他 MacMIME 结构部分转换为 multipart/appledouble、application/applefile、application/mac-binhex40 或 application/macbinary 的 MIME 结构。更进一步,关键字 BinhexMacbinary 也请求转换为非 MacMIME 格式部分的指定格式,虽然 X-MAC-TYPEX-MAC-CREATOR 参数包含于 MIME Content-type: 标题中。CHARSET-CONVERSION 的关键字 Block 通知 MTA 从 MacMIME 格式部分只提取数据分支,放弃资源分支;(这样做丢失信息,使用 Appledouble 进行替代通常更为合适)。

例如,以下 CHARSET-CONVERSION 表将通知MTA在向 ims-ms 通道传递时转换成 Appledouble 格式。

CHARSET-CONVERSION

  IN-CHAN=*;OUT-CHAN=l;CONVERT Appledouble

向 Appledouble 格式的转换只应用于已经是一种 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,且进行转换时对从 MACBINARY 或 BINHEX 部分转换来的任意的 MS Word 或 PostScript 文档使用指定的 MIME 标签,则适当的表应为:

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:parameter 提供值。注意,MIME 的重标注能够用来在这些部件上强制生成别的方式不会有的参数。


服务转换

MTA 转换服务功能可用于用站点提供的过程来处理邮件以产生一新形式的邮件。既不同于上面讨论的 CHARSET-CONVERSION 操作种类,也不同于对单个 MIME 邮件部分的内容进行操作的 conversion 通道,转换服务对整个 MIME 邮件部分(MIME 标题和内容)以及整个 MIME 邮件进行操作。同样,与其他 CHARSET-CONVERSION 操作或转换通道操作不同,转换服务由自己完成 MIME 分解、解码、重编码和重新组装。

类似于其他 CHARSET-CONVERSION 操作,转换服务通过 CHARSET-CONVERSION 映射表被启用。如果第一次查找 CHARSET-CONVESION 映射表产生一 YesAlways 关键字,那么 MTA 将核实 MTA conversions 文件的存在。如果 conversions 文件存在,MTA 将在文件中查找指定 SERVICE-COMMAND 的条目,发现该条目,则执行该条目。conversions 文件条目应有如下形式:

in-chan=channel-pattern;
  in-type=type-pattern; in-subtype=subtype-pattern;
  service-command=command

请注意 command 字符串。它是一个应被执行以实施服务转换(例如,调用文档转换器)的命令。该命令必须处理一输入文件,其中包含需要得到服务的邮件文本,并作为输出生成一个包含新邮件文本的文件。在 UNIX 系统中,如果命令成功,退出时必须返回 0,否则返回非 0 值。

环境变量用于传递输入和输出文件的名字,同样也可用来传递包含邮件信封收件人地址列表的文件的名字。这些环境变量的名字是:

这三个环境变量的值可能使用标准命令行代入法代入到命令行中:也就是说,在 UNIX 变量名字之前加上美元符号。


上一页    目录    索引    下一页
(c) 2002 年 Sun Microsystems, Inc. 版权所有。

更新日期:2002 年 2 月 27 日