Sun ONE Messaging Server 6.0 管理员指南 |
第 11 章
使用预定义频道首次安装 Messaging Server 时,有几个频道已经被定义(请参见表 11-1)。本章介绍如何使用 MTA 中预定义的频道定义。
如果您还未阅读过第 8 章“关于 MTA 服务和配置”,则应该在阅读本章前先阅读该章。有关在 imta.cnf 文件中配置重写规则的信息,请参见第 9 章“配置重写规则”。
本章包含以下各节:
配置频道缺省值对 defaults 频道进行了介绍。
表 11-1 预定义的频道
频道
定义
defaults
用于指定各种频道的缺省关键字。请参见配置频道缺省值。
l
仅适用于 UNIX。用于进行路由决策和使用 UNIX 邮件工具提交邮件。
ims-ms
向本地存储传送邮件。
native
仅适用于 UNIX。向 /var/mail 传送邮件。(请注意,Messaging Server 不支持对 /var/mail 的访问。用户必须使用 UNIX 工具访问 /var/mail 存储中的邮件。)
pipe
用于通过站点提供的程序或脚本执行传送。pipe 频道执行的命令由管理员通过 imsimta 程序接口控制。
reprocess
process这两个频道用于延迟邮件处理和脱机邮件处理。reprocess 频道作为源频道或目标频道,通常不可见;process 频道与其它 MTA 频道一样是可见的。
defragment
提供了重新组合 MIME 片段邮件的方法。
conversion
对流经 MTA 的邮件按主体部分执行转换。
bitbucket
用于需要被废弃的邮件。
inactive/deleted
用于处理已在目录中被标记为“无效/已删除”的用户的邮件。通常退回邮件并向邮件发件人返回自定义的退回消息。
hold
用于保留用户的邮件。例如,当用户从一个邮件服务器迁移到另一个邮件服务器时。
sms
向 SMS 网关提供对单向电子邮件的支持。
tcp_local
tcp_intranet
tcp_auth
tcp_submit
tcp_tas实现基于 TCP/IP 的 SMTP。多线程的 TCP SMTP 频道包含一个多线程的 SMTP 服务器,该服务器在分发程序的控制下运行。外发 SMTP 邮件由频道程序 tcp_smtp_client 处理,并根据需要在作业控制器的控制下运行。
tcp_local 接收来自远程 SMTP 主机的外来邮件。根据是否使用智能主机/防火墙配置,将外发邮件直接发送到远程 SMTP 主机,或者将外发邮件发送到智能主机/防火墙系统。
tcp_intranet 在内部网中接收和发送邮件。
tcp_auth 用作 tcp_local 的切换频道;经过验证的用户将切换到 tcp_auth 频道,以避免中继阻止限制。
tcp_submit 在保留的提交端口 587(请参见 RFC 2476)上接收邮件提交(通常来自用户代理)。
tcp_tas 是各站点用来进行统一邮件传送的特殊频道。
使用 Pipe 频道将邮件传送给程序用户可能希望将外来邮件传递给程序而不是邮箱。例如,用户可能希望将其外来邮件发送到邮件分类程序。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 目录 msg_svr_base/data/site-programs 中。还要确保将执行权限设置为“others”。
要使用户能够访问程序,用户的 LDAP 条目必须包含以下属性和值:
maildeliveryoption:program
mailprogramdeliveryinfo:myprocmail有关 imsimta program 实用程序的详细信息,请参见 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 程序传送收件人的邮件。
/usr/lib/procmail -d %s
配置本地 (/var/mail) 频道选项文件可用于控制本地频道的各种特性。此本地频道选项文件必须存储在 MTA 配置目录中并且命名为 native_option(例如 msg_svr_base/config/native_option)。
选项文件由若干行组成。每一行包含一个选项的设置。选项设置具有以下格式:
value 可以是字符串或整数,这取决于选项的要求。
使用 Hold 频道临时保留邮件hold 频道用于保留暂时无法接收新邮件的收件人的邮件。邮件被保留可能是由于正在更改用户名,或者由于正在将用户的邮箱从一个邮件主机或域移动到另一个邮件主机或域。可能还有其它原因要临时保留邮件。
要保留邮件时,将把邮件定位到 msg_svr_base/queue/hold 目录中的 hold 频道,这时使用的机制与将邮件定位到 reprocess 频道时所使用的机制相同。使用这种方法,将不更改信封 To: 地址。邮件将作为 ZZxxx.HELD 文件写入到 msg-server/queue/hold 目录中的 hold 频道队列。这可以防止作业控制器看到这些邮件,因此它们将被“保留”。使用 imsimta qm dir -held 命令可以查看 .HELD 文件列表。使用 imsimta qm -release 命令可以选择和释放这些邮件。释放邮件时,将其名称更改为 ZZxxx.00,并通知作业控制器。然后,与 hold 频道关联的主程序 reprocess.exe 将处理这些邮件。因此,将使用正常的重写机制处理邮件(以及 To:地址)。
有关 imsimta qm 命令的详细信息,请参见 Sun ONE Messaging Server Reference Guide。
Conversion 频道conversion 频道使您可以对流经 MTA 的指定邮件执行任意的主体部分处理。(请注意,主体部分不同于邮件,邮件可以包含多个主体部分,例如附件中的主体部分。此外,主体部分是由 MIME 标题指定和描述的。)该处理可以由站点提供的任何程序或命令过程进行,并可以进行诸如文本或图像的格式转换、病毒扫描、语言转换等操作。可以选择 MTA 通信的各种邮件类型用于转换,并且可以为每种类型的邮件主体部分指定特定的进程和程序。
使用本章的前提是了解频道的概念(请参见频道)。有关使用 conversion 频道进行病毒扫描的补充信息,请参见 Messaging Server 文档 Web 站点底部的 Messaging Server 技术说明。
conversion 频道的实现由以下部分组成:A) 选择邮件通信用于处理,B) 指定处理不同邮件的方式。将对这些过程作进一步详细介绍。
MIME 概述
conversion 频道大量使用 MIME(通用 Internet 邮件扩展服务)标题行。您需要了解邮件结构和 MIME 标题字段。有关 MIME 的完整信息,请参见 RFC 1806、2045 至 2049 和 2183。为方便起见,本文对 MIME 作了简要概述。
邮件结构
简单邮件由标题和主体组成。标题位于邮件的顶部并包含特定的控制信息(例如日期、主题、发件人和收件人)。主体是标题后面第一个空行之后的所有内容。MIME 指定了构建更复杂的邮件的方法,邮件可以包含多个主体部分,甚至主体部分中还可以嵌套主体部分。这样的邮件称作多部分邮件,如前文中所述,conversion 频道对邮件按主体部分进行处理。
MIME 标题
MIME 规范为主体部分定义了一系列标题行。其中包括 MIME-Version、Content-type、Content-Transfer-Encoding、Content-ID 和 Content-disposition。conversion 频道最经常使用的是 Content-type 和 Content-disposition 标题。以下显示了某些 MIME 标题行的示例:
Content-type 标题
MIME Content-Type 标题说明主体部分的内容。以下显示了 Content-Type 标题的格式(带有示例):
type 说明主体部分内容的类型。类型包括 Text、Multipart、Message、Application、Image、Audio 和 Video。
subtype 进一步说明内容类型。每个 Content-type 都有自己的一组子类型。例如:text/plain、application/octet-stream 和 image/jpeg。MIME 邮件的内容子类型是由 IANA(Internet 编号授权机构)指定和列出的。在以下站点可以查看该列表:http://www.isi.edu/in-notes/iana/assignments/media-types/media-types。
parameter 特定于各个 Content-type/subtype 对。例如,以下显示了 charset 和 name 参数:
charset 参数为文本邮件指定字符集。name 参数提供将数据写入文件时建议使用的文件名。
Content-disposition 标题
MIME Content-disposition 标题提供主体部分的显示信息。通常将其添加到附件中,指定是显示附件的主体部分 (inline) 还是显示将被复制的文件名 (attachment)。Content-disposition 标题具有以下格式:
Content-disposition: disposition_type; parameter1=value;parameter2=value...
disposition_type 通常为 inline(显示主体部分)或 attachment(显示为要保存的文件)。Attachment 通常具有参数 filename,该参数带有一个值,指定被保存文件的建议文件名。
有关 Content-disposition 标题的详细信息,请参见 RFC2183。
选择用于转换处理的通信
与其它 MTA 频道不同,conversion 频道通常不是在地址或 MTA 重写规则中指定的。相反,邮件是使用 CONVERSIONS 映射表(由 imta_tailor 文件中的参数 IMTA_MAPPING_FILE 指定)发送到 conversion 频道的。该表的条目具有以下格式:
MTA 处理每个邮件时将探测 CONVERSIONS 映射表(如果存在)。如果 source-channel 是邮件所来自的频道,destination-channel 是邮件将要进入的频道,则执行 CONVERT 之后的操作(Yes 意味着 MTA 将邮件从其 destination-channel 转移到 conversion 频道;如果未发现匹配,邮件将被排入常规目标频道)。
注
user@conversion.localhostname 格式或 user@conversion 格式的地址将通过 conversion 频道进行路由,而不考虑 CONVERSIONS 映射表。
以下示例将所有非内部邮件(来自 Internet 或发送到 Internet 的邮件)路由到 conversion 频道。
第一行指定将处理来自 tcp_local 频道的邮件。第二行指定也将处理进入 tcp_local 频道的邮件。tcp_local 频道处理进入和来自 Internet 的所有邮件。由于缺省设置是不经过 conversion 频道,因此其它任何邮件将不经过 conversion 频道。
请注意,这是一个非常基本的表,对于具有更多自定义配置的站点(例如,使用多个外发到 Internet 的 tcp_* 频道的站点,或使用多个从 Internet 进入的 tcp_* 频道的站点)可能不够用。
控制转换处理
当邮件被发送到 conversion 频道时,将按主体部分对其进行处理。处理是由 MTA conversions 文件控制的,该文件由 imta_tailor 文件中的 IMTA_CONVERSION_FILE 选项指定(缺省指定:msg_svr_base/conversions)。conversions 文件由一些条目组成,这些条目控制将被处理的主体部分的类型和处理的方式。
每个条目由一个或多个行组成,行中包含一个或多个 name=value 参数子句。参数子句中的值符合 MIME 惯例。除最后一行外,每一行必须以分号 (;) 结尾。此文件中的一个物理行最多可包含 252 个字符。您可以使用向后斜线 (\) 继续字符将一个逻辑行分为多个物理行。将通过不以分号结束的行、一个或多个空行或者两者的结合来终止条目。
以下是 conversion 文件条目的简单示例:
代码示例 11-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=application 和 in-subtype=wordperfect5.1 指定邮件部分的 MIME Content-type 标题必须为 application/wordperfect5.1。
可以使用其它 in-* 参数对邮件部分作进一步限定。(请参见表 11-6。)上述条目将对具有以下 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"
在代码示例 11-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 是不必要的,因为 conversion 频道缺省为外发主体部分原始的 MIME 标签。可以使用其它输出参数指定外发主体部分的其它 MIME 标签。
out-mode=block(代码示例 11-1)指定站点提供的程序将返回的文件类型。也就是说,它指定存储文件的方式,以及在返回的文件中重新读取 conversion 频道的方式。例如,html 文件以文本模式存储,而 .exe 程序文件或 zip 文件以块/二进制模式存储。模式用于说明被读取文件的特定存储格式。
代码示例 11-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 是 conversion 频道环境参数(请参见使用 Conversion 频道环境变量),指定包含原始主体部分的文件以及程序将存储被转换主体部分的文件。
用 DELETE=1 替换 command 参数即可删除邮件部分,而不对主体部分执行命令。
注
只要修改了 conversions 文件,就必须重新编译该配置(请参见 Sun ONE Messaging Server Reference Manual 中的 imsimta refresh 命令)。
Conversion 频道信息流程
信息的流程如下:包含主体部分的邮件进入 conversion 频道。conversion 频道分析邮件,并逐一处理各部分。然后 conversion 频道对主体部分进行限定,即通过将主体部分的 MIME 标题行与限定参数进行比较来确定是否对其进行处理。如果主体部分合格,则开始转换处理。如果要将 MIME 或主体部分信息传递到转换脚本,该信息将存储在由信息传递参数指定的环境变量(表 11-3)中。
这时,将对主体部分进行由操作参数指定的操作。通常,该操作为删除主体部分或将其传递给脚本中包含的程序。脚本将处理主体部分,然后将其重新发送给 conversion 频道,以重新组合成处理后的邮件。脚本还可以使用 conversion 频道输出选项将信息发送给 conversion 频道。这些信息可能是要添加到输出主体部分的新的 MIME 标题行、要返回给邮件发件人的错误文本或者指示 MTA 启动某些操作(例如退回、删除或保留邮件)的特殊指令。
最后,conversion 频道按照输出参数的指定对输出主体部分的标题行进行替换。
使用 Conversion 频道环境变量
对邮件主体部分进行操作时,在频道和站点提供的程序之间来回传递 MIME 标题行信息(或整个主体部分)通常是很有用的。例如,程序可能需要 Content-type 和 Content-disposition 标题行信息以及邮件主体部分。通常,站点提供的程序的主要输入是从文件读取的邮件主体部分。对主体部分进行处理后,程序需要将其写入一个文件,conversion 频道可以从该文件中进行读取。这种类型的信息传递是通过使用 conversion 频道环境变量进行的。
可以使用 parameter-symbol-* 参数在 conversions 文件中创建环境变量,或通过使用一组预定义的 conversion 频道环境变量(请参见表 11-4)进行创建。
以下 conversions 文件条目和外来标题显示了如何使用环境变量将 MIME 信息传递给站点提供的程序。
conversions 文件条目:
in-channel=*; in-type=application; in-subtype=*;
parameter-symbol-0=NAME; parameter-copy-0=*;
dparameter-symbol-0=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=NAME 指定将第一个 Content-type 参数值(此示例中为 Draft1.doc)存储在称作 NAME 的环境变量中。
parameter-copy-0=* 指定将输入主体部分的所有 Content-type 参数复制到输出主体部分。
dparameter-symbol-0=FILENAME 指定将第一个 Content-disposition 参数值(此示例中为 Draft1.doc)存储在称作 FILENAME 的环境变量中。
dparameter-copy-0=* 指定将输入主体部分的所有 Content-disposition 参数复制到输出主体部分。
message-header-file=2 指定将邮件的原始标题作为一个整体(最外层邮件标题)写入到由环境变量 MESSAGE_HEADERS 指定的文件中。
original-header-file=1 指定将封闭的 MESSAGE/RFC822 部分的原始标题写入到由环境变量 INPUT_HEADERS 指定的文件中。
override-header-file=1 指定从环境变量 OUTPUT_HEADERS 指定的文件中读取 MIME 标题,这将覆盖封闭的 MIME 部分中原始的 MIME 标题行。$OUTPUT_HEADERS 是运行转换时创建的应急的临时文件。站点提供的程序将使用此文件存储转换过程中更改的 MIME 标题行。然后,当 conversion 频道重新组合主体部分时,将从此文件中读取 MIME 标题行。请注意,只能对 MIME 标题行进行修改。其它通用的非 MIME 标题行不能通过 conversion 频道进行更改。
override-option-file=1 指定 conversion 频道从 OUTPUT_OPTIONS 环境变量命名的文件中读取 conversion 频道选项。请参见使用 Conversion 频道输出选项。
command="msg_svr_base/bin/viro-scan500.sh" 指定将对邮件主体部分执行的命令。
表 11-3 Conversion 频道环境变量
环境变量
说明
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 标题行。站点提供的程序应创建并编写此文件。请注意,文件应包含实际 MIME 标题行(而不是 option=value 行),后跟一个空行作为其最后一行。另请注意,只能对 MIME 标题行进行修改。其它通用的非 MIME 标题行不能通过 conversion 频道进行更改。
OUTPUT_OPTIONS
文件名称,站点提供的程序应从此文件中读取 conversion 频道选项。请参见使用 Conversion 频道输出选项。
使用 Conversion 频道输出选项
conversion 频道输出选项(表 11-4)是动态变量,用于将信息和特殊指令从转换脚本传递到 conversion 频道。例如,在主体部分处理期间,脚本可能要发送一个特殊指令,要求 conversion 频道退回邮件,并向返回的邮件添加错误文本,说明邮件中带有病毒。
输出选项是通过在所需的转换条目中设置 OVERRIDE-OPTION-FILE=1 启动的。然后,脚本将根据需要设置输出选项并将其存储在环境变量文件 OUTPUT_OPTIONS 中。脚本完成对主体部分的处理后,conversion 频道将从 OUTPUT_OPTIONS 文件中读取选项。
OUTPUT_OPTION 变量是 conversion 频道从中读取选项的文件的名称。通常,它被用作传递信息的应急临时文件。以下示例显示了一个脚本,该脚本使用输出选项向邮件中带有病毒的发件人返回错误消息。
/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=178029946OUTPUT_DIAGNOSTIC='Virus found and deleted’ 行告诉 conversion 频道将文本 Virus found and deleted 添加到邮件中。
178029946 是基于 pmdf_err.h 文件的 PMDF__FORCERETURN 状态,该文件位于 msg_svr_base/include/deprecated/pmdf_err.h 中。此状态代码指示 conversion 频道将邮件返回发件人。(有关使用特殊指令的详细信息,请参见使用 Conversion 频道输出退回、删除或保留邮件。)
以下显示了输出选项的完整列表。
表 11-4 Conversion 频道输出选项
选项
说明
OUTPUT_TYPE
输出邮件部分的 MIME 内容类型。
OUTPUT_SUBTYPE
输出邮件部分的 MIME 内容子类型。
OUTPUT_DESCRIPTION
输出邮件部分的 MIME 内容说明。
OUTPUT_DIAGNOSTIC
conversion 频道强制退回邮件时,作为发送给发件人的邮件的一部分的文本。
OUTPUT_DISPOSITION
输出邮件部分的 MIME content-disposition。
OUTPUT_ENCODING
在输出邮件部分中使用的 MIME 内容传送编码。
OUTPUT_MODE
conversion 频道编写输出邮件部分所用的 MIME Mode,因此也是收件人读取输出邮件部分使用的模式。
STATUS
转换器的退出状态。这通常是一个特殊指令,启动由 conversion 频道进行的某些操作。在 msg_svr_base/include/deprecated/pmdf_err.h 中可以查看指令的完整列表。
封闭 MESSAGE/RFC822 部分中的标题
对邮件部分执行转换时,conversion 频道可以访问封闭 MESSAGE/RFC822 部分中的标题,或者访问邮件标题(如果没有封闭 MESSAGE/RFC822 部分)。标题中的信息对于站点提供的程序可能会很有用。
如果选择了带有 ORIGINAL-HEADER-FILE=1 的条目,则封闭 MESSAGE/RFC822 部分的所有原始标题行都将被写入由 OUTPUT_HEADERS 环境变量所表示的文件。如果 OVERRIDE-HEADER-FILE=1,则 conversion 频道将读取由 OUTPUT_HEADERS 环境变量所表示的文件的内容,并将其用作该封闭部分中的标题。
通过转换条目调用映射表
可以将 out-parameter-* 值存储在任意命名的映射表中并对其进行检索。某些客户机使用一个普通名称(例如 att.dat)发送所有附件,不管附件是 postscript、msword、text 还是其它类型,上述功能对于重命名客户机发送的附件很有用。这是重新标记邮件部分,以便其它客户机(例如 Outlook)能够通过读取扩展名来打开邮件部分的普通方法。
从映射表检索参数值的语法如下:
‘mapping-table-name:mapping-input[$Y, $N]’
$Y 将返回一个参数值。如果未找到匹配,或者匹配返回 $N,将忽略转换文件条目中的此参数,或将其看作空字符串。缺少匹配或返回 $N 不会导致转换条目本身被中止。
请仔细阅读以下映射表:
用于上述映射表的以下转换条目将导致在附件中使用特定文件名称替换普通文件名称:
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=* 指定被处理的邮件必须来自 content-type 标题为 application/*(* 指定任何子类型都可以)的 tcp_local 频道。
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。
使用 Conversion 频道输出退回、删除或保留邮件
本节介绍如何使用 conversion 频道选项退回、删除或保留邮件。基本过程如下:
在 msg_svr_base/include/deprecated/pmdf_err.h 中可以查看特殊指令的完整列表。conversion 频道常用的指令如下:
表 11-5 Conversion 频道常用的特殊指令
名称
十六进制值
十进制值
PMDF__FORCEHOLD
0x0A9C86AA
178030250
PMDF__FORCERETURN
0x0A9C857A
178029946
PMDF__FORCEDELETE
0x0A9C8662
178030178
我们将使用示例来说明这些指令的功能。
退回邮件
要使用 conversion 频道退回邮件,请在相应的 conversions 文件条目中设置 OVERRIDE-OPTION-FILE=1,并将以下行添加到转换脚本中:
echo "STATUS=178029946" >> $OUTPUT_OPTIONS
如果希望将简短的文本字符串添加到退回的邮件中,请将以下行添加到转换脚本中:
echo OUTPUT_DIAGNOSTIC=text-string >> $OUTPUT_OPTIONS
其中 text string 大致为:“The message sent from your machine contained a virus which has been removed.Be careful about executing email attachments.”
有条件地删除邮件部分
根据邮件部分所包含的内容有条件地删除邮件部分可能会很有用。可以使用输出选项进行此操作。与之相反,DELETE=1 转换参数子句将无条件删除邮件部分。
要使用输出选项删除邮件部分,请在相应的 conversions 文件条目中设置 OVERRIDE-OPTION-FILE=1,并将以下行添加到转换脚本中:
echo "STATUS=178030178" >> $OUTPUT_OPTIONS
保留邮件
根据邮件包含的内容有条件地保留邮件可能会很有用。要使用输出选项删除邮件部分,请在相应的 conversions 文件条目中设置 OVERRIDE-OPTION-FILE=1,并将以下行添加到转换脚本中:
echo "STATUS=178030250" >> $OUTPUT_OPTIONS
这将请求 conversion 频道将邮件保留为 conversion 频道队列中的 .HELD 文件。
Conversion 频道示例
以下示例中所示的 CONVERSIONS 映射和一组转换规则使 GIF、JPEG 和 BITMAP 文件被发送到假设的频道 tcp_docuprint 中,并被自动转换为 PostScript。其中几个转换使用假设的 /usr/bin/ps-converter.sh 进行该转换。还包含一个将 WordPerfect 5.1 文件转换为 Microsoft Word 文件的附加规则。
!
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’"
表 11-6 转换参数
参数
说明
限定参数(指定邮件被转换之前必须匹配的参数。)
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-DPARAMETER-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 部分的 Subject。
输出参数(指定主体部分的转换后输出设置。)
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
执行转换所需执行的命令。执行转换所需执行的命令。此参数是必需的;如果未指定命令,将忽略条目。请使用 /(而不是 \)来指定路径。示例:command="D:/tmp/mybat.bat"
DELETE
0 或 1。如果设置该标志,将删除邮件部分。(如果被删除的是邮件中唯一的部分,将使用一个空文本部分进行替换。)
RELABEL
RELABEL=1 将把 MIME 标签重新标记为输出参数指定的任意内容。Relabel=0 不进行任何操作。通常在标记错误的部分中进行重新标记(例如:从 Content-type: application/octet-stream 到 Content-type: application/msword),以便用户可以“双击”打开一个部分,而无需将该部分保存到文件中,然后再用程序打开。
SERVICE-COMMAND
SERVICE-COMMAND=command 将执行站点提供的程序,该程序将在整个 MIME 邮件(MIME 标题和内容主体部分)中操作。此外,与其它 CHARSET-CONVERSION 操作或 conversion 频道操作不同,service-command 需要自己进行 MIME 分解、解码、重新编码和重新组合。请注意,此标志将使条目在 conversion 频道处理期间被忽略;相反,将在字符集转换处理期间执行 SERVICE-COMMAND 条目。请使用 /(而不是 \)来指定路径。示例:command="D:/tmp/mybat.bat"
TAG
输入标记,如邮件列表 CONVERSION_TAG 参数所设置。
信息传递参数(用于在频道和站点提供的程序之间传递信息。)
DPARAMETER-SYMBOL-n
将在其中存储 Content-disposition 参数值(如果存在)的环境变量;n = 0、1、2...在执行站点提供的程序之前,将从 Content-disposition: 参数列表中按顺序提取每个 DPARAMETER-SYMBOL-n(n=0 是第一个参数,n=2 是第二个参数,等等),并将其置于指定的环境变量中。
PARAMETER-SYMBOL-n
将在其中存储 Content-Type 参数值(如果存在)的环境变量;n = 0、1、2...在执行站点提供的程序之前,将从 Content-Type: 参数列表中按顺序提取每个 PARAMETER-SYMBOL-n(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,conversion 频道将从环境变量 OUTPUT_HEADERS 中读取 MIME 标题行,这将覆盖封闭的 MIME 部分中的原始标题行。
OVERRIDE-OPTION-FILE
如果 OVERRIDE-OPTION-FILE=1,conversion 频道将从 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 是目标频道的名称(邮件将进入的频道)。如果出现匹配,所产生的字符串应该是用逗号分隔的关键字列表。表 11-7 列出了这些关键字。
表 11-7 CHARSET-CONVERSION 映射表关键字
关键字
说明
Always
强制转换,即使邮件将在进入 out-channel 之前先通过 conversion 频道。
Appledouble
将其它 MacMIME 格式转换为 Appledouble 格式。
Applesingle
将其它 MacMIME 格式转换为 Applesingle 格式。
BASE64
将 MIME 编码转换为 BASE64。此关键字仅应用于已经编码的邮件部分。使用内容传送编码 7BIT 或 8bit 的邮件不需要任何特殊编码,因此该 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-channel 和 out-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 映射表影响的其它类型的邮件重新格式化的示例。
非 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
或者,如果要对传送到每个频道的邮件进行转换,您只需指定 OUT-CHAN=*,而不是 OUT-CHAN=ims-ms。但是这将增加邮件处理的开销,因为这时要对进入 tcp_local 频道的所有邮件进行仔细检查,而不只是检查发送到特定频道的邮件。
更重要的是,这种不加选择的转换会使系统对于只是通过系统的邮件(未必属于您自己的站点)的转换变得迟疑不决或可能不进行转换;而在这种情况下,系统应该只起传输作用,除了邮件信封和相关的传输信息,不必对其它信息进行更改。
要将 MIME 转换为 Microsoft Mail SMTP 网关可以理解的格式,请将 MTA 配置中的某个单独频道(例如 tcp_msmail)用于 Microsoft Mail SMTP 网关,然后将以下内容放入 mappings. 文件中:
CHARSET-CONVERSION
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 频道的邮件,如果到达时的原始 MIME 标记为 application/octet-stream,但带有扩展名为 ps 或 msw 的文件名参数,则它们将分别被重新标记为 application/postscript 或 application/msword。(请注意,这种更精确的标记本来应该由原来的用户代理或网关自己执行。)
CHARSET CONVERSION TABLE
CHARSET-CONVERSION
IN-CHAN=tcp_local;OUT-CHAN=mr_local;CONVERT Yes
MTA CONVERSIONS FILE ENTRIES
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 文件部分有四种不同的常用格式。其中三种格式(Applesingle、Binhex 和 Macbinary)由在一个部分中共同编码的 Macintosh 资源分叉和 Macintosh 数据分叉组成。第四种格式(Appledouble)是多部分的格式,资源分叉和数据分叉位于不同的部分中。因此在非 Macintosh 平台上,Appledouble 可能是最有用的格式,因为在这种情况下可以忽略资源分叉部分,非 Macintosh 应用程序可以使用数据分叉部分。但是专门向 Macintoshe 进行发送时,其它格式可能会非常有用。
MTA 可以在这些不同的 Macintosh 格式之间进行转换。CHARSET-CONVERSION 关键字 Appledouble、Applesingle、Binhex 或 Macbinary 告诉 MTA 将其它 MacMIME 结构部分分别转换为 multipart/appledouble、application/applefile、application/mac-binhex40 或 application/macbinary MIME 结构。此外,Binhex 或 Macbinary 关键字还可以请求对非 MacMIME 格式部分进行指定的格式转换,如果该部分的 MIME Content-type: 标题中包含 X-MAC-TYPE 和 X-MAC-CREATOR 参数。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,并在转换时将特定的 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 重新标记功能将这些参数强制放入邮件部分(否则邮件部分中将没有这些参数)。
服务转换
可以将 MTA 的转换服务功能与站点提供的程序一起使用来处理邮件,以生成新格式的邮件。上述类型的 CHARSET-CONVERSION 操作和 conversion 频道操作都是在单个 MIME 邮件部分的内容中进行,转换服务与它们不同,它是在整个 MIME 邮件部分(MIME 标题和内容)以及整个 MIME 邮件中操作。此外,与其它 CHARSET-CONVERSION 操作或 conversion 频道操作不同,转换服务需要自己进行 MIME 分解、解码、重新编码和重新组合。
与其它 CHARSET-CONVERSION 操作一样,转换服务通过 CHARSET-CONVERSION 映射表启用。如果 CHARSET-CONVESION 映射表的第一个探测产生了 Yes 或 Always 关键字,则 MTA 将检查 MTA conversions 文件是否存在。如果 conversions 文件存在,MTA 将在其中查找指定 SERVICE-COMMAND 的条目,如果找到这样的条目,则执行该条目。conversions 文件条目应具有以下格式:
command 字符串是最重要的。它是执行服务转换时应该执行的命令(例如调用文档转换器)。命令必须处理一个输入文件,其中包含要服务的邮件文本,并生成一个输出文件,其中包含新邮件文本。在 UNIX 中,如果操作成功,命令必须使用“0”退出,否则使用非零值退出。
环境变量用于传递输入文件名称、输出文件名称以及包含邮件信封收件人地址列表的文件的名称。这些环境变量的名称如下:
通过使用标准命令行替换可以将这三个环境变量的值替换到命令行中:即在变量名称前加 UNIX 美元字符。
使用 BrightmailBrightmail Inc. 是为电子邮件服务器提供反垃圾邮件和反病毒软件解决方案的公司。Brightmail 解决方案由 Brightmail 服务器和下载到电子邮件服务器的实时反垃圾邮件和反病毒规则更新组成。有关将反病毒软件集成到系统中的其它方法,请参见 Conversion 频道。
Brightmail 的工作方式
Brightmail 服务器部署在用户站点上。Brightmail 在 Internet 周围设置了电子邮件探测,用于检测新的垃圾邮件。Brightmail 技术人员创建了实时阻止垃圾邮件的自定义规则。也可以将这些规则实时下载到 Brightmail 服务器。Brightmail 数据库将保持更新,Brightmail 服务器将为指定用户或域运行此数据库的电子邮件过滤器。
Brightmail 的体系结构
图 11-1 说明了 Brightmail 的体系结构。
图 11-1
Brightmail 和 Messaging Server 体系结构
当 Brightmail 支援和运作中心 (BLOC) 从电子邮件探测接收到垃圾邮件时,操作员将立即创建相应的反垃圾邮件规则,该规则将被下载到 Brightmail 用户计算机上。同样,Brightmail 也将发送 Symantec 安全响应实时病毒规则。用户的 Brightmail 服务器将使用这些规则捕捉垃圾邮件和病毒。
MTA 使用 Brightmail SDK 与 Brightmail 服务器通信。MTA 根据 Brightmail 返回的响应分发邮件。MTA 收到邮件 (1a) 或 (1b) 后,将把邮件发送到 Brightmail 服务器 (2)。Brightmail 服务器使用其规则和数据来确定邮件是否为垃圾邮件或病毒 (3),并向 MTA 返回结论。根据该结论,MTA 将 (4a) 放弃邮件或将邮件作为文件保存到文件夹,或 (4b) 将其正常传送到目的地。
由于 Brightmail SDK 是第三方软件,因此我们未将其包含在安装工具包中。必须从 Brightmail Inc. 获得 Brightmail SDK 和服务器软件。MTA 的配置设置可以判断是否装入 Brightmail SDK 以及装入的位置,以启用 Brightmail 集成。
装入 SDK 后,Brightmail 邮件处理将由若干因素和粒度级别来确定(Brightmail 用于指定有效处理的术语为选定)。这由以下条件指定:
对于任何特定的邮件收件人,上述选定项和缺省项是相互组合的,即如果已经指定用于垃圾邮件和病毒的缺省频道,则无需使用基于每个用户的选定。也就是说,如果系统管理员决定为所有人进行垃圾邮件和病毒的过滤,则无需向用户显示用于垃圾邮件或病毒的选定功能。无法选择退出处理,也就是说,如果用户已经选定某项服务,则不能说不需要该服务。这还意味着,如果您选定了服务,并且您已经将邮件转发给另一个地址,则该地址将在以您的名义执行完过滤后获得该邮件。
仅提供两种服务,即病毒检测或垃圾邮件检测。Brightmail 还提供“内容过滤”服务,但此功能是使用 Sieve 提供的,因此让 Brightmail 进行 Sieve 过滤不具有增值效果。
确定邮件包含病毒后,可以将 Brightmail 服务器配置为清除病毒并将干净的邮件重新提交回 MTA。(由于丢失有关重新提交的干净邮件中的原邮件信息会造成某些不良的负面影响,因此我们建议您不要将 Brightmail 配置为将干净的邮件重新提交回 MTA。)当邮件为垃圾邮件时,从 Brightmail 返回的结论和 Brightmail 中的配置使 MTA 能够确定如何处理该邮件。主要可以进行三种处理:放弃邮件、将邮件作为文件保存到文件夹、或将其正常传送到 INBOX 中。
Brightmail 服务器可以与 MTA 位于同一系统中,也可以位于单独的系统中。事实上,您可以让多个 Brightmail 服务器服务于一个或多个 MTA。Brightmail SDK 使用 Brightmail 配置文件来确定要使用的 Brightmail 服务器。MTA 不必处理这些问题。
Brightmail 要求和性能注意事项
部署 Brightmail
本节介绍如何为以下配置部署 Brightmail:
BrightMail 过滤功能是使用关键字或 LDAP 属性在 Messaging Server 中启用的。系统中的过滤方法是累加而成的。也就是说,它是关键字和属性的结合。
在目标频道或源频道中为所有用户激活 Brightmail 处理
- 安装并配置 Brightmail 服务器。
要在系统中安装 Brightmail,请咨询您的 Brightmail 代表。
- 通过向 options.dat 文件添加以下两个 MTA 选项来设置 Brightmail 库和配置文件参数:
Brightmail_Library=path_and_filename_of_libbmiclient.so
Brightmail_config_file=path_and_filename_of_brightmail_config_file- 指定进行 Brightmail 处理时频道和电子邮件的方向(源或目标)。
在频道块中设置关键字 sourcebrightmailoptin 或 destinationbrightmailoptin(请参见 MTA 配置文件)。
sourcebrightmailoptin 指定 Brightmail 软件将处理来自频道的所有邮件。
destinationbrightmailoptin 指定 Brightmail 软件将处理进入频道的所有邮件。
这些属性的有效值如下:
spam - 垃圾邮件过滤器
virus - 病毒过滤器
spam,virus - 垃圾邮件和病毒过滤器示例
示例 1 - Brightmail 将对进入 tcp_siroemail 频道的邮件进行垃圾邮件和病毒过滤:
示例 2,Brightmail 将对来自 tcp_local 频道的邮件进行垃圾邮件过滤:
为选定用户激活 Brightmail 处理
- 安装并配置 Brightmail 软件。
要在系统中安装 Brightmail,请咨询您的 Brightmail 代表。
- 设置 Brightmail 库和配置文件参数。
请使用 options.dat 文件中的以下两个 MTA 选项:
Brightmail_Library=path_and_filename_of_libbmiclient.so
Brightmail_config_file=path_and_filename_of_brightmail_config_file- 指定用来对指定用户激活 Brightmail 处理的 LDAP 属性。
在 option.dat 文件中设置 LDAP_OPTIN=mailAntiUBEService。可以指定除 mailAntiUBEService 之外的 LDAP 属性,但是我们建议使用此名称。
- 在用户条目中设置 LDAP 属性 mailAntiUBEService,以接受 Brightmail 处理。
mailAntiUBEService 的有效值为 spam(垃圾邮件过滤器)和 virus(病毒过滤器)。
示例
假定在 option.dat 文件中将 LDAP_OPTIN 设置为 mailAntiUBEService。如果用户 Otis Fanning 在其用户条目中将 mailAntiUBEService 属性设置为 spam 和 virus,Brightmail 将对其邮件进行垃圾邮件和病毒过滤。代码示例 11-2 显示了 Brightmail 为 Otis Fanning 启用的用户条目。
代码示例 11-2 Brightmail 的示例 LDAP 用户条目
dn: uid=fanning,ou=people,o=sesta.com,o=ISP
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: inetUser
objectClass: ipUser
objectClass: inetMailUser
objectClass: inetLocalMailRecipient
objectClass: nsManagedPerson
objectClass: userPresenceProfile
cn: Otis Fanning
sn: fanning
initials: OTF
givenName: Otis
pabURI: ldap://ldap.siroe.com:389/ou=fanning,ou=people,o=sesta.com,o=isp,o=pab
mail: Otis.Fanning@sesta.com
mailAlternateAddress: ofanning@sesta.com
mailDeliveryOption: mailbox
mailHost: manatee.siroe.com
uid: fanning
dataSource: iMS 5.0 @(#)ims50users.sh 1.5a 02/3/00
userPassword: password
inetUserStatus: active
mailUserStatus: active
mailQuota: -1
mailMsgQuota: 100
mailAntiUBEService: virus
mailAntiUBEService: spam
为系统中的选定域激活 Brightmail 处理
- 安装并配置 Brightmail 软件。
要在系统中安装 Brightmail,请咨询您的 Brightmail 代表。
- 设置 Brightmail 库和配置文件参数。
请在 options.dat 文件中设置以下两个 MTA 选项:
Brightmail_Library=path_and_filename_of_libbmiclient.so
Brightmail_config_file=path_and_filename_of_brightmail_config_file- 指定用来对指定域激活 Brightmail 处理的 LDAP 属性。
在 option.dat 文件中设置 LDAP_DOMAIN_ATTR_OPTIN=mailAntiUBEService。可以指定其它 LDAP 属性名称,但是我们建议使用此名称,以使 Messaging Server 模式保持一致。
- 在域条目(DC 树中)中设置 LDAP 属性 mailAntiUBEService,该条目的电子邮件将接受 Brightmail 处理。
mailAntiUBEService 的有效值为 spam(垃圾邮件过滤器)和 virus(病毒过滤器)。
示例
假定在 option.dat 文件中将 LDAP_DOMAIN_ATTR_OPTIN 设置为 mailAntiUBEService。在 DC 树的 example.com 域条目中,将 mailAntiUBEService 属性设置为 spam 和 virus。代码示例 11-3 显示了 Brightmail 启用的域条目。
代码示例 11-3 Brightmail 的示例 LDAP 域条目
dn: dc=sesta,dc=com,o=internet
objectClass: domain
objectClass: inetDomain
objectClass: mailDomain
objectClass: nsManagedDomain
objectClass: icsCalendarDomain
description: DC node for sesta.com hosted domain
dc: sesta
inetDomainBaseDN: o=sesta.com,o=isp
inetDomainStatus: active
mailDomainStatus: active
mailDomainAllowedServiceAccess: +imap, pop3, http:*
mailRoutingHosts: manatee.siroe.com
preferredMailHost: manatee.siroe.com
mailDomainDiskQuota: 100000000
mailDomainMsgQuota: -1
mailClientAttachmentQuota: 5
mailAntiUBEService: spam
mailAntiUBEService: virus
Brightmail 选项和关键字
表 11-8 和表 11-9 显示了 Messaging Server 的 Brightmail 选项和关键字。表 11-10 显示了选定的 Brightmail 配置文件选项。可以从 Brightmail 获得最新的 Brightmail 配置文件选项的完整列表。
表 11-8 Brightmail MTA 选项 (option.dat)
选项
说明和缺省值
Brightmail_library
激活 Brightmail 所必需。Brightmail SDK 共享库的完整文件路径和名称。当与 Brightmail_config_file 一起指定时,MTA 将在运行时装入此库。它还可以与 SpamAssassin 一起使用。
示例:/opt/mailwall/lib/libbmiclient.so
缺省值:无Brightmail_config_file
激活 Brightmail 所必需。Brightmail 配置文件的完整文件路径和名称。当与 Brightmail_library 一起指定时,将启用 MTA 进行 Brightmail 集成。它还可以与 SpamAssassin 一起使用。
示例:/opt/mailwall/config
缺省值:无LDAP_optin(以前的版本中为 LDAP_SPARE_2)
基于每个用户激活 Brightmail 所使用的 LDAP 属性名称。这应该是 inetMailUser 对象类中的属性。如果没有其它预定义的属性,请使用 mailAntiUBEService。
属性本身(例如:mailAntiUBEService)具有多个值并区分大小写。它的值可以是小写的 spam 或 virus。如果用户选定了两个值,则将拥有两个这样的属性,一个包含垃圾邮件,一个包含病毒。
缺省值:无
LDAP_domain_attr_optin
基于每个域激活 Brightmail 所使用的 LDAP 属性名称。它应用于目标域。它与上述 LDAP_optin 类似,但是应该位于对象类 mailDomain 中。
缺省值:无
Brightmail_verdict_n
Brightmail_verdict_n 和 Brightmail_action_n 是匹配的对,其中 n 是 0 到 9 之间的数字。如果使用对 Brightmail 结论的缺省解释,通常不指定这些选项。此选项可能的值是由 Brightmail 配置文件选项 blSWClientDestinationLocal(用于本地域)或 blSWClientDesintationForeign(用于非本地域)中“|”右侧的值指定的。使用此示例:
blSWClientDestinationLocal=spam|spamfolder
您将希望使 Brightmail_verdict_0=spamfolder(不是 spam,它在“|”的左侧。)这看起来可能不太直观,但它确实是这样工作的。
缺省值:无
Brightmail_null_action
指定当从 Brightmail 返回的结论与 Brightmail 配置文件中的空操作匹配时要执行的 Sieve 命令(带有可选的 if-then-else 语句*)。例如,如果 Brightmail 配置文件具有以下设置:
blSWClientDestinationLocal:spam|
其中“|”后面的“null”或者没有内容意味着空操作。如果邮件的结论为 spam,与“|”前面的字 spam 匹配,MTA 将进行空操作。通常无需指定此选项,因为缺省的操作为 discard,与 Brightmail 所指的空操作相匹配。
Sieve 命令的模板为:
data:,[require “command”;] command;
其中 require 语句是 reject 和 fileinto 必需的。缺省值:data:,discard;
Brightmail_action_n
作为与 Brightmail_verdict_n 选项匹配的对,它可以指定要执行的 Sieve 命令(带有可选的 if-then-else 语句*)。例如,如果要拒绝垃圾邮件,您可以将这对选项设置如下:
Brightmail_verdict_0=spamfolder
Brightmail_action_0=data:,require "reject"; reject "Rejected by Brightmail";Sieve 命令的模板为:
data:,[require ?command?;] command;
其中 require 语句是 reject 和 fileinto 必需的。另一个示例:Brightmail_verdict_1=spam-folder
Brightmail_action_1_=data;,require "fileinto";fileinto "Junk";此示例将垃圾邮件(假定 spam-folder 是 Brightmail 为垃圾邮件返回的结论)作为文件保存到名为 Junk 的文件夹中。如果没有 Junk,则将垃圾邮件作为文件保存到名为 spam-folder 的文件夹中。
缺省值:无
Brightmail_optional
如果设置为 1,当 MTA 调用初始路由装入 Brightmail SDK 失败时,MTA 将继续,就像未启用 Brightmail 一样。如果 MTA 已经与 Brightmail 对话,而 Brightmail 异常中止,则此设置不产生影响。在这种情况下,MTA 将向 SMTP 客户机返回临时错误。
缺省值:0
Brightmail_string_action
指定当 Brightmail 结论与某个操作(Brightmail 配置文件中的字符串)匹配时要执行的 Sieve 命令(带有可选的 if-then-else 语句*)。例如,如果 Brightmail 配置文件中有
blSWClientDestinationLocal:spam|spam-folder
则 spam-folder 是一个字符串。如果结论为 spam,则我们将有一个与该结论匹配的字符串。此选项很少使用,因为指定字符串时的缺省操作是将邮件作为文件保存在该文件夹中。
Sieve 命令的模板为:
data:,[require “command”;] command;
其中 require 语句是 reject 和 fileinto 必需的。缺省值:data:,require "fileinto"; fileinto "$U";
$U 是 blSWClientDestinationLocal 值中“|”右侧的字符串(在以上示例中为 spam-folder)。
* 这是 option.dat 中可选的 if-then-else 语句的 Sieve 示例。请注意,它可以用于 Brightmail_action_n、Brightmail_null_action 或 Brightmail_string_action。
Brightmail_string_action=data:,require "fileinto";\
if header :contains ["resent-from"] ["User-1"] {\
fileinto "testspam";\
} else {\
fileinto "spam";};
表 11-9 Brightmail 的 MTA 频道关键字
频道关键字
说明
sourcebrightmail
指定源自此频道的所有邮件都接受 Brightmail 处理。如果已通过 LDAP 属性选定收件人或收件人的域,则让 Brightmail 知道所有收件人地址,而不考虑目标频道。查看收件人的 LDAP 属性 mailAntiUBEService(或等效属性)可以确定是过滤垃圾邮件还是病毒,或是两者都过滤,或是两者都不过滤。如果 mailAntiUBEService 未指定垃圾邮件或病毒,则不会将邮件发送到 Brightmail 服务器进行过滤。如果 switchchannel 有效,则应该将此关键字放置在 switched-to 频道上。
语法:
sourcebrightmaildestinationbrightmail
指定如果已通过 LDAP 属性 mailAntiUBEService(或等效属性)选定收件人,则发送到此频道的所有邮件将接受 Brightmail 处理。
语法:
destinationbrightmaildestinationbrightmailoptin
指定发送到此频道的所有邮件都将接受指定的 Brightmail 处理(垃圾邮件处理或病毒处理或两者),即使用户或域未通过 LDAP 属性选定上述服务。此关键字后面跟过滤器列表。所跟的列表必须为 spam 或 virus 或 spam,virus 或 virus,spam。
示例 1:
ims-ms destinationbrightmailoptin spam,virus. . .Brightmail 将对发送到邮件存储中的所有邮件进行垃圾邮件和病毒扫描。
sourcebrightmailoptin
指定源自此频道的所有邮件都将接受指定的 brightmail 处理(垃圾邮件处理或病毒处理或两者),即使用户或域未通过 LDAP 属性选定上述服务。此关键字后面跟系统范围内缺省的过滤器列表。所跟的列表必须为 spam 或 virus 或 spam,virus 或 virus,spam。如果 switchchannel 有效,则应该将此关键字放置在 switched-to 频道上。
示例 1:
tcp_local sourcebrightmailoptin spam,virus . . .指定 Brightmail 对邮件进行垃圾邮件和病毒扫描,而不考虑用户的 LDAP 属性。
示例 2:
tcp_local sourcebrightmailoptin virus . . .指定缺省情况下只对邮件进行病毒扫描。在这种情况下,可以基于每个用户启用垃圾邮件过滤,或者通过 LDAP 属性用目标域来启动垃圾邮件过滤。
表 11-10 选定的 Brightmail 配置文件选项
Brightmail 选项(不区分大小写)
说明(属性值区分大小写)
blSWPrecedence
给定的邮件可以有多个结论。此选项指定优先级顺序。因此,如果将此选项指定为 virus-spam(结论由连字符 [-] 隔开),则首先对邮件进行病毒处理,然后进行垃圾邮件处理。这是将 Brightmail 和 Sun ONE Messaging Server 一起使用时的建议设置。
blSWClientDestinationDefault
指定如何传送正常邮件(也就是说,不是垃圾邮件也不是病毒,因此没有结论)。通常您希望正常传送此邮件,因此应指定 inbox 作为值。无缺省值。
blSWLocalDomain
此属性指定被当作本地域的域。此属性可以有多个行,指定多个被当作本地域的域。本地域和外地域用于指定对结论的两种不同处理方法。
请参见以下的 blSWClientDestinationLocal 和 blSWClientDestinationForeign。例如,您可以指定
blSWLocalDomain=siroe.com
blSWClientDestinationLocal
此选项指定用于本地域的结论和操作对。通常此选项有两个行,一行用于垃圾邮件,一行用于病毒。值的格式为 verdict|action,例如,
blSWClientDestinationLocal=spam|spambox
blSWClientDestinationLocal=virus|
Brightmail 对“空”操作(即“|”右侧没有值)的缺省解释是放弃邮件。因此如果以上示例具有结论 virus,将放弃邮件。如果结论为 spam,以上示例将把邮件作为文件保存到名为 spambox 的文件夹。如果邮件不是垃圾邮件或病毒,则结论不匹配,将根据上述 blSWClientDestinationDefault 设置中的设置正常传送邮件。
使用单独的 Brightmail 服务器或 MTA 服务器时,可以通过使用 Brightmail_verdict_n/Brightmail_action_n/Brightmail_null_action/Brightmail_string_action MTA 选项自定义每个 MTA 进行的操作,以覆盖 Brightmail 服务器返回的操作和结论。在此示例中,可以使用 MTA 中不同的 Brightmail_null_action 来覆盖病毒操作(放弃病毒邮件),或使用 Brightmail_verdict_0=spambox 和 Brightmail_action_0=data:,require "fileinto";fileinto "Junk"; 将邮件作为文件保存到名为 Junk 而不是 spambox 的文件夹中。
blSWClientDesintationForeign
格式和解释与上述 blSWClientDestinationLocal 相同,但应用于非本地域中的用户。
blSWUseClientOptin
与 Sun ONE Messaging Server 一起使用时,请始终将此选项设置为 TRUE。
blswcServerAddress
格式为 ip:port[,ip:port,...],用于指定一个或多个 Brightmail 服务器的 IP 地址和端口号。
通用 Brightmail 部署方案
本节将介绍几种通用的部署 Brightmail 的方案。它们是:
- 处理进入本地邮件存储(ims-ms 频道)的外来邮件。
- 处理外发到 Internet(tcp-local 频道)的邮件。
- 处理从 Internet(tcp-local 频道)进入的邮件。
- 处理进入特定域的邮件(请参见为系统中的选定域激活 Brightmail 处理)。
- 处理进入特定用户的邮件(请参见为选定用户激活 Brightmail 处理)。
- 将 Brightmail 处理设置为 Class-of-Service 选项。
- 向垃圾邮件添加标题。
Brightmail 处理本地外来邮件
您可能希望将系统配置为对本地传送的所有邮件进行垃圾邮件和病毒的过滤。要将 Brightmail 设置为处理进入本地邮件存储(即进入 imta.cnf 中的 ims-ms 频道)的所有外来邮件,请将 destinationbrightmailoptin 关键字添加到 ims-ms 频道定义中。示例:
ims-ms defragment subdirs 20 backoff “pt5m” “pt10” “pt30” “pt1h” \
“pt2h” “pt4h” maxjobs 1 pool IMS_POOL fileinto $U+$S@$D filter \
ssrd:$A ims-ms-daemon destinationbrightmailoptin spam,virus
ims-ms-daemonBrightmail 处理来自 Internet 的外来邮件
您可能希望将系统配置为对来自 Internet 的所有邮件进行垃圾邮件过滤。要将 Brightmail 设置为处理来自 Internet 的所有外来邮件,请将 sourcebrightmailoptin 关键字添加到 tcp-local 频道定义中。示例:
tcp_local smtp mx single_sys remotehost inner switchchannel \
identnonelimited subdirs 20 maxjobs 7 pool SMTP_POOL maytlsserver \
maysaslserver saslswitchchannel tcp_auth sourcebrightmailoptin spam
tcp-daemon
Brightmail 处理外发到 Internet 的邮件
您可能希望将系统配置为对外发到 Internet 的所有邮件进行垃圾邮件过滤。要将 Brightmail 设置为处理外发到 Internet 的所有邮件,请将 destinationbrightmailoptin 关键字添加到外发 MTA 中的 tcp-local 频道定义中。示例:
tcp_local smtp mx single_sys remotehost inner switchchannel \
identnonelimited subdirs 20 maxjobs 7 pool SMTP_POOL maytlsserver \
maysaslserver saslswitchchannel tcp_auth \
destinationbrightmailoptin spam
tcp-daemonBrightmail 处理进入特定后端邮件存储主机的外来邮件
要将系统配置为对进入特定后端邮件存储主机的所有邮件进行病毒和垃圾邮件过滤,请执行以下操作:
- 在向后端邮件存储主机发送邮件的所有外来 SMTP 服务器的 imta.cnf 文件中添加重写规则。示例:
msg_store1.siroe.com $U@msg_store1.siroe.com
- 使用 destinationbrightmailoptin 关键字添加与该重写规则对应的频道。示例:
tcp_msg_store1 subdirs 20 backoff “pt5m” “pt10” “pt30” “pt1h” \
“pt2h” “pt4h” maxjobs 1 pool IMS_POOL fileinto $U+$S@$D \
destinationbrightmailoptin spam,virus
msg_store1.siroe.com向垃圾邮件添加标题
您可以向垃圾邮件添加任意标题。要向 Brightmail 软件捕捉到的邮件添加标题 spam-result: Brightmail says this is spam,请将以下内容添加到 option.dat 文件中:
brightmail_string_action=data:,require ["addheader" "spamtest"];addheader "spam-result:Brightmail says this is spam";
只有 "spamtest"]; 之后的文本可以自定义。
使用 SpamAssassinMessaging Server 支持使用 SpamAssassin,它是一种用于识别垃圾邮件的邮件过滤器免费软件。SpamAssassin 由一个使用 Perl 编写的库和一组可用于将 SpamAssassin 集成到邮件传送系统的应用程序和实用程序组成。
SpamAssassin 为每个邮件计算一个分数。该分数是通过对邮件标题和主体信息执行一系列测试来计算的。每个测试可能成功,也可能失败,并据此对分数进行相应调整。该分数是实数,可能为正,也可能为负。超过某个阙值(通常为 5.0)的分数被认为是垃圾邮件。
SpamAssassin 的可配置程度很高。可以随时添加或删除测试,也可以对现有测试的分数进行调整。这都是通过各种配置文件进行的。在 SpamAssassin Web 站点中可以查看有关 SpamAssassin 的详细信息。
调用 Brightmail 垃圾邮件和病毒扫描库的同一机制也可以用于连接到 SpamAssassin spamd 服务器。Sun ONE Messaging Server 中提供的模块的名称为 libspamass.so。
SpamAssassin 要求和性能注意事项
部署 SpamAssassin
本节提供在 Messaging Server 中部署 SpamAssassin 的每一步骤的指导。
- 安装并配置 SpamAssassin。
SpamAssassin Web 站点提供了在各种不同的系统中进行此操作的所有必需信息。
- 将 Brightmail 库和配置文件参数设置到 SpamAssassin 中。
在 options.dat 文件中设置以下两个 MTA 选项:
Brightmail_Library=path_and_filename_of_libspamass.so
Brightmail_config_file=path_and_filename_of_SpamAssassin_config_file- 创建 SpamAssassin 选项文件。
使用 MTA option.dat 文件中的 Brightmail_config_file 选项指定此文件。SpamAssassin 选项文件由 option=value 格式的多个行组成。表 11-11 对选项进行了介绍。
- 根据需要配置 SpamAssassin。
此接口的缺省行为(由缺省的 mode=0 表示)是放弃标识为垃圾邮件的邮件。完成此操作无需设置其它选项。
通过将 SpamAssassin 选项和 Brightmail MTA 选项的设置相结合可以获得其它行为。例如,为了拒绝被标识为垃圾邮件的所有邮件,只需将 BRIGHTMAIL_NULL_ACTION MTA 选项设置如下:
data:,require "reject"; reject "Suspected spam message rejected";
同样,通过将 BRIGHTMAIL_NULL_ACTION 设置为以下内容,可以将垃圾邮件作为文件保存到 SPAM 文件夹中:
data:,require "fileinto"; fileinto "SPAM";
还可以进行更微妙的结合。例如,可以在拒绝邮件中包含垃圾邮件检查结果,只需将 MTA 中的 BRIGHTMAIL_STRING_ACTION 选项设置如下:
data:,require "reject"; reject "Message rejected [$U]";
并在 SpamAssassin 选项文件中设置 MODE=1。
- 启动 spamd 守护程序。通常使用以下通用格式的命令进行此操作:
spamd -d
spamd 缺省为只接受来自本地系统的连接。如果 SpamAssassin 和 Messaging Server 在不同的系统中运行,将需要以下格式的命令:
spamd -d -i <listen_ip_address> -A <allowed_hosts>
其中 listen_ip_address 是要侦听的地址,allowed_hosts 是可以连接到此 spamd 实例的授权的主机或网络(使用 IP 地址)的列表。
表 11-11 SpamAssassin 选项
Spam Assassin 选项
说明
缺省值
host
运行 spamd 的系统的名称
localhost
port
spamd 侦听外来请求的端口号。
783
debug
0 或 1。指定是否打开 libspamass.so 中的调试。spamd 本身的调试是由调用 spamd 的命令行控制的。
0
mode
控制 SpamAssassin 结果到 Brightmail 结论信息的转换。可以使用三种不同的模式:
0 - 如果发现邮件为垃圾邮件,则返回由 verdict 选项指定的结论字符串;如果不是垃圾邮件,则返回缺省的 SpamAssassin 结论。如果 verdict 选项为空或未指定,则返回空结论。
1 - 如果发现邮件为垃圾邮件,则返回 SpamAssassin 结果作为结论。
除了无论是否将邮件视为垃圾邮件都返回结论之外,2 - 与模式 1 相同。
0
verdict
字符串,指定用于 MODE 0 的结论字符串
“”
field
指定 SpamAssasin 结果字符串前缀的字符串。SpamAssassin 结果字符串的外观通常如下:
Spam-Test:False ; 0.0 / 5.0
或者
Spam-Test:True ; 27.7 / 5.0
field 选项提供更改结果中“Spam-Test”部分的方法。请注意,如果指定了空的 field 值,“:”也将被删除。
“Spam-test”
表 11-12 用于 SpamAssassin 的 MTA 选项
用于 Spam Assassin 的 MTA 选项 说明
缺省值
Brightmail_library
SpamAssassin 共享库的完整文件路径和名称。
无
Brightmail_config_file
SpamAssassin 配置文件的完整文件路径和名称。
无
Brightmail_null_action
SIEVE 规则,指定当 SpamAssassin 结论返回空时如何处理邮件。
data:、discard;
Brightmail_string_action
SIEVE 规则,指定当结论为字符串时如何处理邮件。
缺省值:data:,require "fileinto"; fileinto "$U";
$U 是 verdict 返回的字符串。
请参见说明