在某些情况下,某个远程域可能出现故障,发送到该服务器的邮件数量可能会很大,以致外发通道队列将被无法传送的邮件填满。MTA 会尝试定期重新传送这些邮件(重试的频率和次数可以使用 backoff 关键字进行配置),正常情况下,不需要进行任何操作。但是,如果太多邮件阻塞在队列中,则其他邮件可能无法及时传送,因为所有通道作业都在处理积压的无法传送的邮件。
在这种情况下,您可以将这些邮件重新路由到在其自己的作业控制器池中运行的新通道。这将避免处理资源的争用并允许其他通道传送其邮件。下面介绍了此过程。我们先假定一个名为 siroe.com 的域。
创建名为 tcp_siroe-daemon 的新通道并为 pool 关键字添加新值。
在 /msg-svr-base/ config/imta.cnf 的通道块部分创建通道。该通道与常规外发 tcp_* 通道应具有相同的通道关键字。通常,该通道是处理所有出站 (Internet) 通信的 tcp_local 通道。由于 siroe.com 在 Internet 上,因此这就是要模仿的通道。新通道可能类似于如下所示:
tcp_siroe smtp nomx single_sys remotehost inner allowswitchchannel \ dentnonenumeric subdirs 20 maxjobs 7 pool SMTP_SIROE maytlsserver \ maysaslserver saslswitchchannel tcp_auth missingrecipientpolicy 0 \ tcp_siroe-daemon
注意新关键字-值对池 SMTP_SIROE。它指定传送到此通道的邮件将仅使用 SMTP_SIROE 池的计算机资源。另请注意,新通道的前后都需要留一个空白行。
将两个重写规则添加到 imta.cnf 文件的重写规则部分以将发往 siroe.com 的电子邮件定向到新通道。
新重写规则类似于如下所示:
siroe.com $U%$D@tcp_siroe-daemon .siroe.com $U%$H$D@tcp_siroe-daemon |
这些重写规则将发往 siroe.com(包括如 host1.siroe.com 或 hostA.host1.siroe.com 的地址)的邮件定向到正式主机名为 tcp_siroe-daemon 的新通道。这些规则的重写部分,$U%$D 和 $U%$H$D,将保留邮件的原始地址。$U 复制原始地址的用户名。% 为分隔符,@ 位于用户名和域之间。$H 复制主机/域说明的不匹配部分(位于模式中点的左侧)。$D 复制域说明的匹配部分。
定义名为 SMTP_SIROE 的新作业控制器池。
在 /msg-svr-base/ config/job_controller.cnf 中添加以下内容:
[POOL=SMTP_SIROE] job_limit=10 |
这将创建名为 SMTP_SIROE 的邮件资源池,该池最多可以允许 10 个作业同时运行。确保没有在该池定义和其他项之间留下任何空白行。有关作业和池的详细信息,请参见8.7 作业控制器。
重新启动 MTA。
发出以下命令:imsimta cnbuild;imsimta restart
该命令重新编译配置并重新启动作业控制器和分发程序。
本示例中,内部用户的大量电子邮件被发往名为 siroe.com 的特定远程站点。由于某些原因,siroe.com 临时不能接受外来 SMTP 连接,因此无法传送电子邮件。(此类情况并不是只在极少数情况下才发生。)
发往 siroe.com 的电子邮件传入时,外发通道队列(通常为 tcp_local)将被无法传送的邮件填满。MTA 会尝试定期重新传送这些邮件(重试的频率和次数可以使用 backoff 关键字进行配置),正常情况下,不需要进行任何操作。
但是,如果太多邮件阻塞在队列中,则其他邮件可能无法及时传送,因为所有通道作业都在处理积压的 siroe.com 邮件。在这种情况下,您可能希望将 siroe.com 邮件重新路由到在其自身的作业控制器池中运行的新通道(请参见8.7 作业控制器)。这将允许其他通道传送它们的邮件,而无需争用 siroe.com 邮件所使用的处理资源。下面将介绍如何创建新通道以解决此问题。