![]() |
|
iPlanet Messaging Server 5.2 管理员指南 | |
第 9 篇 使用预定义通道
在第一次安装 iPlanet Messaging Server 时,一些通道已经定义(参见表 9-1)。本章说明如何在 MTA 中使用预定义通道的定义。如果尚未阅读第 6 篇 “关于 MTA 服务与配置”,请在阅读后再回到本章内容。有关在 imta.cnf 文件中配置重写规则方面的信息,请参阅第 7 篇 “配置重写规则”。
使用管道通道传递邮件到程序
字符集转换和邮件重格式化
通道
定义
仅限 UNIX 使用。将邮件传递至 /var/mail。(请注意,Messaging Server 不支持对 /var/mail 的访问。用户必须使用 UNIX 工具访问 /var/mail 存储库中的邮件。)
用于通过站点提供的程序或脚本执行传递。管理员可通过 imsimta 程序界面控制管道通道执行的命令。有关详细信息,请参阅“使用管道通道传递邮件到程序”。
这些通道用于延迟及离线邮件的处理。reprocess 作为源或目标通道通常是不可见的,process 则同其它 MTA 通道一样是可见的。
在 TCP/IP 上实现 SMTP。多线程的 TCP SMTP 通道包括一个在 Dispatcher 控制下运行的多线程 SMTP 服务器。外发的 SMTP 邮件由通道程序 tcp_smtp_client 处理,并在需要时在 Job Controller 的控制下运行。
tcp_local 从远程 SMTP 主机接收入站邮件。根据您是否使用 smarhost/防火墙配置,可以直接将出站邮件发送到远程 SMTP 主机或发送到 smarthost/防火墙系统。
tcp_intranet 在 intranet 内部接收和发送邮件。
tcp_auth 用作 tcp_local 的切换通道,授权的用户为躲避 realy-blocking 限制可切换到 tcp_auth 通道。
使用管道通道传递邮件到程序
用户可能希望将来件发往一个程序而不是他们的邮箱。例如,用户可能希望将来件发往邮件分类程序或发往类似于 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_OSERR、EX_IOERR、EX_TEMPFAIL 或 EX_DB)退出,即认为发生了临时错误并且邮件的传递被延迟。如果返回任何其他退出码,即认为邮件无法传递并将退回给发件人。这些退出码已在系统主文件 sysexits.h 中定义。
命令行参数。传递程序可以带有任意个固定参数以及可变参数,%s,代表用户执行之程序的用户名,或代表程序的用户名 + 域名(由邮局管理员“inetmail”执行)。例如,下列命令行使用程序 procmail 传递一封收件人的邮件:
配置本机(/var/mail)通道
您可通过一个选项文件控制本机通道的各种不同特性。此本机通道选项文件必须存储于 MTA 的配置目录并且命名为 native_option(例如,server_root/msg-instance/imta/config/native_option)。选项文件包含若干行,每一行包含一个选项的设置信息。选项设置格式为:
option=value 此 value 根据选项的要求可以是一个字符串或是一个整数。
使用保存通道临时保存邮件
保存通道用来保存被临时停止接收新邮件之收件人的邮件。停止接收邮件可能是由于正在修改用户名或收件人邮箱正在从一邮件主机(域)移向另一邮件主机。也可能还有其他原因导致用户临时被停止接收邮件,但这些最为常见。通过将一个用户的 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 1806、2045 到 2049 以及 2183。为方便起见,这里给出关于 MIME 的简短概述。
邮件结构
一个简单的邮件由一个标题和一段正文组成。标题位于邮件的顶端包含一些如日期,主题,发件人和收件人等控制信息。在标题下第一个空行的后面是正文。MIME 规定了一种构造更复杂邮件的方法,这个方法使邮件可包含多个正文部分,甚至一个正文部分可以嵌套在另一个正文部分中。象这样的邮件称之为“multi-part”邮件,并且,如前面提到的,转换通道执行正文部分到正文部分的处理。
MIME 标题
MIME 规范为各种正文部分定义了一套标题行。它们包含了 MIME-Version、Content-type、Content-Transfer-Encoding、Content-ID 和 Content-disposition。Content-type 和 Content-disposition 是转换通道最常用的邮件头。含有若干 MIME 标题行的例子如下所示:
Content-type(内容类型)标题
MIME Content-Type 标题描述了正文部分的内容。Content-Type 标题格式(加实例)如下所示:
type(类型)描述了正文部分内容的类型。类型的例子有 Text、Multipart、Message、Application、Image、Audio 和 Video。
- Content-type: type/subtype; parameter1=value; parameter2=value...
subtype(子类型)更进一步描述内容的类型。每一种 Content-type 都有它自己的子类型设置。例如:text/plain、application/octet-stream 和 image/jpeg。MIME 邮件的内容子类型由 IANA(因特网编号授权委员会)指定和开列。列表副本请见:
http://www.isi.edu/in-notes/iana/assignments/media-types/media-typesparameter(参数)是针对每个特定的 Content-type/subtype 对的。例如,charset 和 name 参数如下所示:
这里的 charset 参数用于指定文本邮件的字符集。如果数据要写入某个文件,这里的 name 参数给出一个建议的文件名。
- Content-type: text/plain; charset=us-ascii
Content-type: application/msword; name=temp.doc
备注: Content-Type 值,subtypes 和参数名都是不区分大小写的。
Content-disposition(内容配置)标题
MIME Content-disposition 标题为正文部分提供信息表示的方法。这些显示信息常被加到附件中,用以指定附件正文部分是否要显示(inline),或是当作要复制文件的文件名显示(attachment)。Content-disposition 标题格式如下:
disposition_type 通常是 inline(显示正文部分)或 attachment(以要保存的文件形式显示)。Attachment 通常有参数文件名和一个值,用以为保存的文件指定一个建议的名字。
- Content-disposition: disposition_type; parameter1=value;parameter2=value...
关于 Content-disposition 标题的详细信息,请查阅 RFC 2183。
选定转换处理流量
与其它 MTA 通道不同,转换通道不是象通常那样在一个地址或 MTA 重写规则中指定。取而代之的是,邮件是用 CONVERSIONS 映射表(由 imta_tailor 文件中的参数 IMTA_MAPPING_FILE 指定)而被发送到转换通道的。表条目格式如下:
MTA 处理每个邮件时要探查 CONVERSIONS 映射表(如果映射表已给出)。如果 source-channel(源通道)是邮件进入的通道并且 destination-channel(目标通道)是外发邮件的通道,则在 CONVERT 后执行(Yes 意味着 MTA 将邮件从其 destination-channel 转移到转换通道;如果没找到匹配项,邮件将入队到常规的目标通道)。
- IN-CHAN=source-channel;OUT-CHAN=destination-channel;CONVERT Yes/No
备注: 形如 user@conversion.localhostname 或 user@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 个字符以内。可用反斜线(\)续行符号将一个逻辑行分为多个物理行。条目要么由一个以非分号结尾的行终止,要么由一个或多个空白行终止,也可以两种情况同时出现。
子句 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=application 和 in-subtype=wordperfect5.1 指定 MIME Content-type 邮件的标题部分必须是 application/wordperfect5.1。
通过额外的 in-* 参数可进一步限定邮件部分。(参阅表 9-5。)上面的条目将引发针对一邮件部分的转换,该邮件具有下列 MIME 标题行:
在范例 9-1 中的三个 conversion 文件限定参数的后面,有另两个参数,out-type=application 和 out-subtype=msword,指定用置换的 MIME 标题行附加于“已处理”的正文部分。out-type=application 和 out-subtype=msword 指定:外发邮件的 MIME Content-type/subtype 是 application/msword。
注意,既然 in-type 和 out-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_FILE 和 OUTPUT_FILE 是转换通道环境参数(参阅“使用转换通道环境变量”)用来指定一个包含原始正文部分的文件和一个程序将变换后的正文部分存储于其中的文件。
与执行一个针对正文部分的命令不同,邮件部分可通过用 DELETE=1 取代 command 参数而简单地加以删除。
转换通道信息流
信息的流动如下所示:包含正文部分的邮件进入转换通道。转换通道分析邮件,并逐个处理各个部分。转换通道限定正文部分,换句话说,转换通道通过将 MIME 标题行与限定参数进行比较,确定正文部分是否应加以处理。如果正文部分符合要求,则开始进行转换处理。如果 MIME 或正文部分信息须传递给转换脚本,则如信息传递参数所指定的那样被存储在一个环境变量(表 9-3)中。此时,由操作参数指定的一个针对正文部分的操作被执行。典型的操作是正文部分被删除或被传递给一个包装在脚本中的程序。脚本处理正文部分随后将它发送回转换通道以便重新装配而成为处理后邮件。脚本也能使用转换通道的 output options 发送信息到转换通道。这样的信息可能是:添加到输出正文部分的新 MIME 标题行,返回给邮件发送者的出错信息文本,指示 MTA 起动一些如退回、删除、保存邮件之类操作的专用指令等。
使用转换通道环境变量
当对正文部分进行操作时,将 MIME 标题行信息,或全部正文部分,传递到或取自站点提供的程序,通常是有用的。例如,一个程序可能需要 Content-type 和 Content-disposition 标题行信息以及一邮件的正文部分。通常一个站点提供的程序的主输入是从一个文件读出的一邮件的正文部分。在正文部分处理之后,此程序需要将正文部分写到一个以后能被转换通道读取的文件中。这样的信息传递是通过使用转换通道的环境变量实现的。建立环境变量可以在 conversions 文件中使用 parameter-symbol-* 参数创建,也可以使用一组预定义的转换通道环境变量(请参阅表 9-4)。
下列 conversions 文件条目和进入的标题显示如何使用环境变量将 MIME 信息传递到站点提供的应用程序。
conversions 文件条目:
入站邮件报头:
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" 指定针对邮件正文部分执行的命令。
环境变量
说明
包含一附加邮件(不仅仅是正文部分)的原始最外层标题或部分中直接附加 MESSAGE/RFC822 部分的标题的文件的名称。站点提供的程序将读取这个文件。
文件名称,即站点提供的程序应将附加部分的 MIME 标题行存储于其中的文件。站点提供的程序应建立并且写入这个文件。注意:文件将包含实际的标题行(不是 option=value 行),后随一空行作为其最后一行。
文件名称,站点提供的程序将从中读取转换通道选项。请参阅“使用转换通道输出选项”。
使用转换通道输出选项
转换通道输出选项(表 9-4)是将信息和专用指令从转换脚本传递到转换通道的动态变量。例如,在正文部分处理过程中,脚本可能要发送一个专用指令让转换通道退回邮件并把一些错误出错信息文本添加到退回邮件中以声明邮件包含病毒。输出选项的初始化是通过在所需的转换条目中设置 OVERRIDE-OPTION-FILE=1 实现的。此后,输出选项在需要时由脚本设置并存储到环境变量文件 OUTPUT_OPTIONS 中。当脚本完成了对正文部分的处理,转换通道从 OUTPUT_OPTIONS 文件读取选项。
这里的 OUTPUT_OPTION 变量是一个文件名,转换通道即从该文件读取选项。通常它被当作一个随时会消失的临时文件用于传递信息。下面的例子显示脚本使用输出选项给发送病毒的发件人返回的出错讯息。
在这个例子中,系统诊信息和状态码将被添加到 $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 状态。这个状态码指示转换通道将邮件退回给发送者。(有关使用专用指令的详细说明,请参阅“用转换通道输出退回、删除或保存邮件”。)
完整的输出选项列表如下所示。
选项
说明
转换器的退出状态。这通常是转换通道起动某个操作的专用指令。完整的指令列表位于 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 这样的总名称,而不管它们是否是 postscript、msword、text 或其他任何格式,则上述特性对更改客户机传送来的附件的名称很有用。这是一个重新标注“部分”的基本方法,可使其它客户程序(如 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=* 指定:要处理的邮件必须来自 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 映射表中指定的新值。因此,如果参数类型是 msword,name 参数将是 temp.DOC
用转换通道输出退回、删除或保存邮件
本节记述如何使用转换通道选项退回,删除或保存邮件。基本过程如下:
在适当的转换文件条目中设置 OVERRIDE-OPTION-FILE=1。此设置将指示转换通道从 OUTPUT_OPTIONS 文件读取输出选项。
完整的专用指令列表位于 server_root/bin/msg/imtasdk/include/pmdf_err.h。转换通道经常使用的有:在脚本中,通过在 OUTPUT_OPTIONS 文件中写入 STATUS=directive_code 选项来指定专用指令。
名字
十六进制值
十进制值
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
字符集转换和邮件重格式化
字符集转换表是 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 映射表关键字
关键字
说明
将其他 MacMIME 格式或包含 Macintosh 类型和 Macintosh 创建者信息的部分转换为 Macbinary 格式。
字符集转换
如果 MTA 查找并发现到邮件要被重格式化,它将进一步检查邮件的每一部分。要查找所有文本部分,它们的字符集参数要用于第二步查找。只有当 MTA 已经核实并发现需要做转换时才执行第二步查找。第二步查找的输入字符串的形式如下所示:IN-CHAN=in-channel;OUT-CHAN=out-channel;IN-CHARSET=in-char-set
这里的 in-channel 和 out-channel 和以前的含义一样,in-char-set 为与问题中特定部分相关联的字符集的名字。如果第二次查找没有发现匹配项,不执行任何字符集转换(尽管有可能根据第一次查找中匹配的关键字对邮件进行重格式化,例如修改 MIME 结构)。如果有匹配项,将产生如下形式的字符串:
这里的 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 网关的邮件的接收通道,以下设置将对传递给本地用户的邮件启用转换功能: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,并且将以下内容放到映射表文件中:
IN-CHAN=*;OUT-CHAN=tcp_msmail;CONVERT RFC1154
重标注 MIME 标题
某些用户代理或网关可能发出带有 MIME 标题的邮件,这种标题所包含信息不像它应该包含的那样多,但也足够用来构建更为精细的 MIME 标题。尽管最好的解决方法是对这些用户代理或网关进行正确地配置,但如果不能控制这些用户代理和网关,也可转而请求 MTA 尝试重新构建更为有用的 MIME 标题。如果第一次查找 CHARSET-CONVERSION 映射表时产生的关键字为 Yes 或 Always,那么 MTA 将核实是否有一个 conversions 文件存在。如果有 conversions 文件,MTA 即在文件中查找 RELABEL=1 的条目,若找到此条目,MTA 将执行条目中指定的任何 MIME 重标注。
例如,如下所示的 CHARSET-CONVERSION 表和 MTA conversions 文件条目的组合将导致一些邮件被重标注:那些到达 tcp_local 通道并且路由到 ims-ms 通道的邮件将重标注为 application/postscript;那些到达时原先的 MIME 标注为 application/octet-stream,但具有扩展名 ps 或 msw 的文件名参数的邮件将重标注为 application/msword。(注意,更为精确的标注应由最初用户代理或网关自己执行。)
MacMIME 格式转换
Macintosh 文件有两部分,资源分支包含 Macintosh 的特定信息,数据分支包含可在其他平台上使用的数据。这为传输 Macintosh 文件带来额外的复杂性,因为传输 Macintosh 文件各个部分时通常要使用 4 种不同的格式。这些格式种的三种,Applesingle、Binhex 和 Macbinary 将 Macintosh 资源分支和 Macintosh 数据分支合并编码在一起。第四种格式,Appledouble,是一种多部分格式,资源分支和数据分支位于相互独立的部分中。因此 Appledouble 成为非 Macintosh 平台上最为有用的格式,这种格式能够忽略资源分支,而数据分支则则为非 Macintosh 应用程序所利用。当在特地向 Macintoshes 发送时其他格式可能很有用。MTA 能够在这些不同 Macintosh 格式间进行转换。CHARSET-CONVERSION 的关键字 Appledouble、Applesingle、Binhex 或 Macbinary 通知 MTA 分别将其他 MacMIME 结构部分转换为 multipart/appledouble、application/applefile、application/mac-binhex40 或 application/macbinary 的 MIME 结构。更进一步,关键字 Binhex 或 Macbinary 也请求转换为非 MacMIME 格式部分的指定格式,虽然 X-MAC-TYPE 和 X-MAC-CREATOR 参数包含于 MIME Content-type: 标题中。CHARSET-CONVERSION 的关键字 Block 通知 MTA 从 MacMIME 格式部分只提取数据分支,放弃资源分支;(这样做丢失信息,使用 Appledouble 进行替代通常更为合适)。
例如,以下 CHARSET-CONVERSION 表将通知MTA在向 ims-ms 通道传递时转换成 Appledouble 格式。
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 标签,则适当的表应为:
注意,映射表条目模板(右侧)必须设有 $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 映射表产生一 Yes 或 Always 关键字,那么 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 日