除了 imta.cnf 文件,Messaging Server 还提供了其他几个配置文件,以帮助您配置 MTA 服务。表 10–5 中汇总了这些文件。
如果对 reverse、forward 或通用数据库进行了更改,可执行命令 imsimta reload 使更改生效。如果对 imta.cnf、mappings 文件、aliases、conversions 或 option.dat 文件进行了更改,而这些更改不会影响 job_controller,则应先执行 imsimta cnbuild,再执行 imsimta restart smtp。如果对 dispatcher.cnf 进行了更改,则需要执行 imsimta restart dispatcher。如果对编译后的配置中的配置文件进行了更改,并且这些更改会影响作业控制器但不会影响 SMTP 服务器,则通常应执行以下命令:imsimta cnbuild 和 imsimta restart job_controller。
有关这些命令的详细信息,请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》中的“MTA Commands”。
表 10–5 MTA 配置文件
文件 |
说明 |
---|---|
别名文件(强制) |
实现目录中不存在的别名。msg_svr_base/config/aliases |
TCP/IP (SMTP) 通道选项文件(也称为 SMTP 选项文件) |
设置特定于通道的选项。msg_svr_base/config/channel_option |
由转换通道使用,用于控制邮件正文部分的转换。msg_svr_base/config/conversions |
|
分发程序配置文件(强制) |
分发程序的配置文件。msg_svr_base/config/dispatcher.cnf |
作业控制器文件(强制) |
作业控制器所使用的配置文件。/msg_svr_base/config/job_controller.cnf |
MTA 配置文件(强制) |
用于地址重写、路由以及通道定义。/msg_svr_base/config/imta.cnf |
映射文件(强制) |
映射表的系统信息库。/msg_svr_base/config/mappings |
全局 MTA 选项文件。/msg_svr_base/config/option.dat |
|
调整文件(强制) |
用于指定位置和某些优化参数的文件。/msg_svr_base/config/imta_tailor |
常规查找表(可选) |
常规查找工具与常规数据库等效。可重新装入的经过编译的配置的一部分。 用于指定位置和某些优化参数的文件。/msg_svr_base/config/general.txt |
正向查找表(可选) |
To: 地址的查找。与正向数据库等效。可重新装入的经过编译的配置的一部分。 /msg_svr_base/config/forward.txt |
反向查找表(可选) |
From: 地址的反向查找。与反向数据库等效。可重新装入的经过编译的配置的一部分。/msg_svr_base/config/reverse.txt |
别名文件 aliases 可用来设置目录中未设置的别名。特别地,根的地址是一个很好的示例。如果目录中存在同一别名,则将忽略在此文件中设置的别名。有关别名和 aliases 文件的更多信息,请参见别名。
对 aliases 文件进行更改后,必须重新启动 MTA 或执行命令 imsimta reload。
TCP/IP 通道选项文件可以控制 TCP/IP 通道的各种特性。通道选项文件必须存储在 MTA 配置目录中,并命名为 x_option,其中 x 是通道的名称。例如,msg_svr_base/config/imta/tcp_local_option。有关更多信息,请参阅配置 SMTP 通道选项。有关所有通道选项关键字和语法的完整信息,请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》。
转换文件 conversions 指定转换通道如何对通过 MTA 的邮件执行转换。可以选择转换任何 MTA 通信子集,并可以使用任何一组程序或命令过程来执行转换处理。MTA 将查看转换文件,以便为每个正文部分选择适当的转换。
有关此文件的语法的更多信息,请参见转换通道。
分发程序配置文件 dispatcher.cnf 用于指定分发程序配置信息。安装时将创建一个默认的配置文件,可不必对其进行更改而直接使用。但是,如果出于安全性或性能原因需要修改默认配置文件,则可以通过编辑 dispatcher.cnf 文件来实现此操作。(有关概念性信息,请参见分发程序。)
分发程序配置文件的格式与其他 MTA 配置文件的格式类似。指定选项的行具有以下格式:
option=value
option 是选项的名称,value 是选项被设置成的字符串或整数。如果 option 可以接受整数值,则可以使用 b%v 格式的记数法指定基数,其中 b 是以 10 为基础表示的基数,v 是以 b 为基础表示的实际值。此类选项规范根据应用以下选项设置的服务,使用以下格式的行分组成几个部分:
[SERVICE=service-name]
service-name 是服务的名称。显示在任何此类部分标记之前的初始选项规范将全局地应用于所有部分。
以下是一个样例分发程序配置文件 (dispatcher.cnf)。
! The first set of options, listed without a [SERVICE=xxx] ! header, are the default options that will be applied to all ! services. ! MIN_PROCS=0 MAX_PROCS=5 MIN_CONNS=5 MAX_CONNS=20 MAX_LIFE_TIME=86400 MAX_LIFE_CONNS=100 MAX_SHUTDOWN=2 ! ! Define the services available to Dispatcher ! [SERVICE=SMTP] PORT=25 IMAGE=msg_svr_base/lib/tcp_smtp_server LOGFILE=msg_svr_base/log/tcp_smtp_server.log |
有关此文件参数的更多信息,请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》。
mappings 文件定义 MTA 如何将输入字符串映射为输出字符串。
MTA 的许多组件都使用面向表查找的信息。一般说来,此类表格可用于将输入字符串转换(即映射)为输出字符串。此类表(称为映射表),通常显示为两列,第一(或左边的)列给出了可能的输入字符串,第二(或右边的)列给出了与输入关联的结果输出字符串。大多数 MTA 数据库都是此类映射表的实例。但是,MTA 数据库文件不具备通配符查找功能,因为其具有内在局限性,必须要扫描整个数据库才能找到匹配的通配符。
mappings 文件为 MTA 提供了支持多个映射表的工具。它提供了完整的通配符工具,并同时提供了多步和迭代映射方法。此方法的计算量比使用数据库要大,特别是条目很多时。但是,其灵活性带来的好处是实际上您不需要等效数据库中的大多数条目,从而可能使实际总体开销较低。
可以使用 imsimta test -mapping 命令来测试映射表。有关 mappings 文件和 test -mapping 命令的语法的更多信息,请参见映射文件和 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》。
对 mappings 文件进行更改后,必须重新启动 MTA 或执行命令 imsimta reload。
选项文件 option.dat 指定与特定于通道的选项相反的全局 MTA 选项。
您可以使用选项文件覆盖作为整体应用于 MTA 的各种参数的默认值。特别地,选项文件可用于建立读入配置和别名文件的各种表的大小。您还可以使用选项文件限制 MTA 接收的邮件的大小、指定 MTA 配置中允许的通道数量、设置允许的重写规则的数量,等等。
在 option.dat 中,以 #、! 或 ; 开头的行被视为注释行,即使前一行带有表示待续的后缀 \ 也不例外。这就说明必须留意包含这些字符的长选项(特别是传送选项)。
对于因自然布局而具有以 # 或 ! 开头的连续行的传送选项,有一种安全而巧妙的解决方法。
有关选项文件语法的更多信息,请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》。
调整文件 imta_tailor 用于设置各种 MTA 组件的位置。为使 MTA 正常工作,imta_tailor 文件必须始终位于 msg_svr_base/config 目录中。
尽管您可以编辑此文件以反映在特定安装中的更改,但是您必须谨慎地执行此操作。对此文件进行更改后,必须重新启动 MTA。最好是在 MTA 停止时进行更改。
除非绝对必要,否则请勿编辑此文件。
有关此文件的完整信息,请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》。
作业控制器可以创建并管理传送邮件的通道作业。这些通道作业在作业控制器内的进程池中运行。可以将池看作是一个运行通道作业的“地方”。池提供了一个计算区域,一组作业可以在其中运行而不与池外的作业竞争资源。(有关作业控制器概念和通道关键字配置的信息,请参阅作业控制器、用于通道执行作业的处理池和服务作业限制。)
作业控制器文件 job_controller.cnf 用于指定以下通道处理信息:
定义各种池
为所有通道指定主程序名和从程序名(如果适用)
在 imta.cnf 文件中,可以使用 pool 关键字指定进程池(已在 job_controller.cnf 中定义)的名称。例如,以下 job_controller.cnf 样例文件的片段定义池 MY_POOL:
[POOL=MY_POOL] job_limit = 12
以下 imta.cnf 样例文件的片断指定通道块中的池 MY_POOL:
channel_x pool MY_POOL channel_x-daemon
如果要修改与默认池配置关联的参数或添加其他池,则可以通过编辑 job_controller.cnf 文件,然后停止并重新启动作业控制器来实现。
作业控制器配置文件中的第一个池用于不指定池名称的所有请求。在 MTA 配置文件 (imta.cnf) 中定义的 MTA 通道可以通过使用后跟池名称的 pool 通道关键字将它们的处理请求定向到特定的池。池名称必须与作业控制器配置中的池名称匹配。如果作业控制器不能识别请求的池名称,则将忽略请求。
在初始配置中,定义了以下池:DEFAULT、LOCAL_POOL、IMS_POOL、SMTP_POOL。
通常情况下,如果您需要将某些通道的处理与其他通道的处理区分开,则可以在作业控制器配置中添加附加的池定义。您也可以选择使用具有不同特征的池。例如,您可能需要控制某些通道可以处理的同时进行的请求的数量。您可以通过创建具有作业限制的新池来完成此操作,然后使用 pool 通道关键字将这些通道定向到更适合的新池。
除了池定义以外,作业控制器配置文件还包含 MTA 通道表以及作业控制器处理每个通道的请求所必须使用的命令。两类请求分别称为“主”类型和“从”类型。通常情况下,通道的 MTA 邮件队列中存储了邮件时,便会调用通道主程序。主程序会使邮件退出队列。
调用从程序的目的是轮询某通道并选取进入该通道的所有邮件。尽管几乎所有的 MTA 通道都有主程序,但是很多通道却没有或不需要从程序。例如,经过 TCP/IP 处理 SMTP 的通道就不使用从程序,因为网络服务和 SMTP 服务器将根据 SMTP 服务器发出的请求接收外来的 SMTP 邮件。SMTP 通道的主程序是 MTA 的 SMTP 客户端。
如果与通道关联的目标系统无法一次处理多个邮件,则需要创建一种新类型的池,其作业限制为一个池:
[POOL=single_job] job_limit=1
反之,如果目标系统具有足够的并行处理能力,则可以将作业限制设置为较高的值。
示例 10–1 显示了样例作业控制器配置文件。表 10–6 显示了可用的选项。
!MTA Job Controller configuration file ! !Global defaults tcp_port=27442 (1) secret=never mind slave_command=NULL (2) max_life_age=3600 (3) ! ! !Pool definitions ! [POOL=DEFAULT] (4) job_limit=10 (5) ! [POOL=LOCAL_POOL] job_limit=10 ! [POOL=IMS_POOL] job_limit=1 ! [POOL=SMTP_POOL] job_limit=1 ! !Channel definitions ! ! [CHANNEL=l] (6) master_command=msg_svr_base/lib/l_master ! [CHANNEL=ims-ms] master_command=msg_svr_base/lib/ims_master ! [CHANNEL=tcp_*] (7) anon_host=0 master_command=msg_svr_base/lib/tcp_smtp_client |
前述示例中的关键项(带有编号、括在括号中,且为粗体)为:
此全局选项定义了作业控制器在其上侦听请求的 TCP 端口号。
为后续的 [CHANNEL] 部分设置默认 MAX_LIFE_AGE。
该 [POOL] 部分定义了名为 DEFAULT 的池。
该 [CHANNEL] 部分应用于名为 l 的通道,即 UNIX 本地通道。该部分中所需的唯一定义是 master_command,作业控制器执行该命令来运行此通道。由于通道名称中没有显示通配符,所以通道必须完全匹配。
该 [CHANNEL] 部分应用于名称以 tcp_* 开头的所有通道。由于此通道名称中包含通配符,所以它将与名称以 tcp_ 开头的任何通道相匹配。
作业控制器可以创建并管理传送邮件的通道作业。这些通道作业在作业控制器内的进程池中运行。可以将池看作是一个运行通道作业的“地方”。池提供了一个计算区域,一组作业可以在其中运行而不与池外的作业竞争资源。请注意,在 job_controller 中设置的作业限制是针对每个池的。例如,如果将 SMTP_POOL 的 job_limit 定义为 10,则在任一给定时刻,只能有 10 个 tcp_smtp 客户机进程可以在该池中运行。
某些情况下,可能需要创建附加的 tcp_* 通道(例如,用于特别缓慢的邮件站点的 tcp 通道)。最好是使这些通道在不同的池中运行。这样做的原因在于,如果我们创建了十个不同的 tcp_* 通道,并且它们全在 SMTP_POOL 中运行,则在任一给定时刻,每个 tcp_* 通道上可能只有一个 tcp_smtp 客户机在运行(具体情况取决于是否有目标为所有 tcp_* 通道的邮件,以及是否将 SMTP_POOL 的 job_limit 定义为 10)。假设系统负载很重,并且所有队列中都有邮件等待通过各个 tcp_* 通道发送出去,这样效率就会很低。用户很可能会为附加的 tcp_* 通道定义附加的池,以防止出现争用槽的情况。
例如,假设我们设置了以下 tcp_* 通道:
tcp_yahoo smtp mx pool yahoo_pool keyword keyword keyword tcp-yahoo-daemon tcp_aol smtp mx keyword keyword keyword pool aol_pool tcp-aol-daemon tcp_hotmail smtp mx pool hotmail_pool keyword keyword keyword tcp-hotmail-daemon ... tcp_sun smtp mx pool sun_pool keyword keyword keyword tcp-sun-daemon |
为了使每个新通道有十个 tcp_smtp_client 进程,我们要在 job_controller.cnf 文件中添加以下行:
[POOL=yahoo_pool] job_limit=10 [POOL=aol_pool] job_limit=10 [POOL=hotmail_pool] job_limit=10 ... [POOL=sun_pool] job_limit=10 |
有关池的更多信息,请参见用于通道执行作业的处理池,另请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》。
表 10–6 作业控制器配置文件选项