上一页 目录 索引 下一页 | |
iPlanet Messaging Server 5.2 管理员指南 | |
第 14 篇 MTA 故障诊断
本章介绍邮件传送代理(MTA)故障诊断的常用工具、方法和程序。本章包括下列各节:
故障诊断概述
与之相关的监视程序内容可在第 15 篇 “监控 iPlanet Messaging Server”中查找。修复邮箱和邮箱数据库 (不同章节)
备注: 在阅读本章之前,应阅读本指南中的第 10 篇到第 6 篇以及 iPlanet Messaging Server Reference Manual 中有关 MTA 配置和命令行实用程序的章节。
故障诊断概述
对 MTA 进行故障诊断的首要步骤之一就是确定从何处开始诊断。视问题情况,可在日志文件中寻找出错信息。在其他情况下,可检查所有标准 MTA 处理,查看 MTA 配置,或启动和停止单个通道。不管使用什么方法,在对 MTA 进行故障诊断时需考虑如下问题:
配置或环境问题是否会防碍邮件的接受(如磁盘空间或配额问题)?
本章将在下列小节中讨论这些问题。邮件进入邮件队列时诸如 dispatcher 和作业控制器的 MTA 服务是否存在?
标准 MTA 故障诊断程序
本节概括了 MTA 的标准故障诊断程序。如果问题没有生成出错信息或出错信息不能提供足够的诊断依据,或者只想对 MTA 进行一般的运行状态检查、测试和标准维护,可遵循使用这些程序步骤。
检查 MTA 配置
使用 imsimta test -rewrite 实用程序检查地址配置。运用此实用程序,不实际发送邮件即可测试 MTA 的地址重写和通道映射。详细信息,请参阅 iPlanet Messaging Server Reference Manual 中“MTA 命令行实用程序”一章。该实用程序通常显示将要应用的地址重写以及邮件将要入队的那个通道。然而,MTA 配置中的句法错误会使实用程序产生出错信息。如果输出不是所预期的话,则需更正配置。
检查邮件队列目录
检查邮件是否在 MTA 邮件队列目录中,典型情况下这个目录就是 /server-root/msg-instance/imta/queue/.使用诸如 imsimta qm 这样的命令行实用程序检查 MTA 邮件队列目录下预期邮件文件的存在。有关 imsimta qm 的详细说明,请参阅 iPlanet Messaging Server Reference Manual 和“imsimta qm 计数器”中的“MTA 命令行实用程序”一章。如果 imsimta test -rewrite 的输出看起来是正确的,检查确认邮件确实位于MTA 邮件队列子目录中。要做到这一点,需启用邮件日志记录(有关 MTA 的详细说明,请参阅“第三部分:服务日志(MTA)”)。然后应查看 /server-root/msg-instance/log/imta/ 目录中的 mail.log_current 文件。可根据邮件 ID 跟踪一个特定邮件,以证实该邮件确放置在 MTA 邮件队列的子目录中。如果找不到该邮件,可能是文件磁盘空间或目录权限出现问题。
检查关键文件的所有权
在安装 iPlanet Messaging Server 时,应当已经选择了一个邮件服务器用户帐户(默认 nobody)。下列目录、子目录和文件应属于此帐户:/server-root/msg-instance/imta/queue/
/server-root/msg-instance/log/imta/
/service-root/msg-instance/imta/tmp如下面 UNIX 系统示例中那样的命令可用于检查这些目录的保护和所有权:
使用如下面 UNIX 系统示例中那样的命令检查确认 /server-root/msg-instance/imta/queue 中的文件属于 MTA 帐户:
ls -l -p -R /usr/iplanet/server5/msg-budgie/imta/queue
检查确认作业控制器和 dispatcher 的运行状态
MTA 作业控制器负责处理 MTA 处理作业的执行,包括大多数外发(主)通道任务。有些 MTA 通道,如 MTA 的多线程 SMTP 通道,包含处理进入邮件的驻留服务器进程。这些服务器为通道处理从属(进入)目录。MTA dispatcher 处理这样的 MTA 服务器的创建。dispatcher 配置选项控制服务器的有效性,已创建服务器的数量以及每个服务器可处理的连接的个数。
要检查确认作业控制器和 dispatcher 的存在和 MTA 服务器和处理作业的运行,需使用命令 imsimta process。在空闲条件下,该命令可使 job_controller 和 dispatcher 工作。例如:
如果作业控制器不存在,于, /server-root/msg-instance/imta/queue 目录中的文件将得以备份,邮件也不会被传递。如果没有 dispatcher,那么将无法接受任何 SMTP 连接。
关于 imsimta process 的详细说明,请参阅 iPlanet Messaging Server Reference Manual。
如果作业控制器和 dispatcher 都不存在,应查看/server-root/msg-instance/log/imta/ 目录中的 dispatcher.log-* 文件或 job_controller.log-* 文件。
如果日志文件不存在或没指示有错误,则需通过使用 imsimta start 命令启动进程。详细信息,请参阅 iPlanet Messaging Server Reference Manual 的文件“MTA 命令行实用程序”一章。
备注: 在运行 imsimta process 时,不应有 Dispatcher 或作业控制器的多重实例。
检查日志文件
如果 MTA 处理作业运行正常而邮件却停留在邮件队列目录中,可检查日志文件确定问题所在。所有 MTA 日志文件均创建在 /server-root/msg-instance/log/imta 目录中。各种 MTA 处理作业的日志文件名格式见表 14-1。
文件名
日志文件内容
Dispatcher 调试。不管 Dispatcher 的 DEBUG 选项是否已设置,都将创建此日志。尽管如此,若想得到详细的调试信息,还是需将 DEBUG 选项设置为一个非零值。
作业控制器日志记录。不管作业控制器的 DEBUG 选项是否已设置,都将创建此日志。尽管如此,若想得到详细的调试信息,还是需将 DEBUG 选项设置为一个非零值。
备注: 每个日志文件在创建时都有唯一的 ID(uniqueid)以防覆盖用同一通道创建的早期日志文件。要找到特定的日志文件,可使用 imsimta view 实用程序。还可通过使用 imsimta purge 命令清除旧的日志文件。详细信息,请参阅 iPlanet Messaging Server Reference Manual 中的“MTA 命令行实用程序”一章。
channel _master.log-uniqueid 和 channel _slave.log-uniqueid 的日志文件将在下列任何一种情况下创建:
当前配置中有错误。
有关调试通道主代理和从属程序的详细说明,请参阅 iPlanet Messaging Server Reference Manual。master_debug 或 slave_debug 关键字设置在 imta.cnf 文件的通道上。
如果 mm_debug 被设置为一个非 0 值(mm_debug > 0)于文件 option.dat 中(在目录:/server-root/msg-instance/imta/config/)。
手工运行通道程序
在诊断 MTA 传递问题时,手工运行一个 MTA 传递任务是很有用的,特别是在为一个或多个通道启用了调试功能之后。imsimta submit 命令会通知 MTA 作业控制器运行通道。如果为有问题的通道启用了调试功能,imsimta submit 将在/server-root/msg-instance/log/imta 目录下生成一个日志文件,如表 14-1 所示。
imsimta run 命令将为当前活动进程下的通道执行输出指向终端机的出站传递。这可能比提交一个任务更简便,尤其在问题可能存在于任务提交本身时。
备注: 为了手工运行通道,作业控制器必须处于运行状态。
有关 imsimta submit 和 imsimta run 命令的语法、选项、参数和示例的信息,请参阅 iPlanet Messaging Server Reference Manual 一章中的“MTA 命令行实用程序”。
启动和停止单个通道
在某些情况下,停止和启动单个通道也许会使邮件队列问题更容易诊断和调试。停止邮件队列能检查列队邮件,以确定是否有循环或垃圾邮件攻击的存在。
使用 imsimta qm stop 命令停止一个特定通道。这样做可不必停止作业控制器,也不必重新编译配置。在下面的例子中,conversion 通道被停止:
有关 imsimta qm start 和 imsimta qm stop 命令的详细说明,请参阅 iPlanet Messaging Server Reference Manual 中关于 MTA 命令行实用程序的那一章。
要继续执行处理,需使用 imsimta qm start 命令重新启动通道。在下面的例子中,conversion 通道被启动:
- imsimta qm stop conversion
- imsimta qm start conversion
停止来自特定域或 IP 地址(入列到一通道的)的入站处理
在将临时 SMTP 的错误返回客户主机时,若想停止针对一个特定域或 IP 地址的入站邮件处理,可运行下列程序之一。这样邮件将不会保留在系统内。请参阅“第一部分:映射表”。
要想停止一特定主机或域名的入站处理,需在 MTA 映射文件中的 ORIG_SEND_ACCESS 映射表(特别是 /server-root/msg-instance/imta/config/mappings)中添加下列访问规则:
若要重新启动来自域或 IP 地址的入站处理,需确保将这些规则从映射表中移出并重新编译配置。此外,您可能希望为每个映射表创建唯一的出错信息。这样做可以确定正在使用的是哪个映射表。
ORIG_SEND_ACCESS
*|*@sesta.com|*|* $X4.2.1|$NHost$ blocked
要停止一特定 IP 地址的入站处理,需在 MTA 映射文件中的 PORT_ACCESS 映射表(特别是 /server-root/msg-instance/imta/config/mappings)中添加下列访问规则:
- 通过使用此程序,发件人的远程 MTA 会在它们的系统中保留邮件,并继续定期的重新发送这些邮件,直到重新启动入站处理为止。
PORT_ACCESS
TCP|*|25|IP_address_to_block|* $N500$ unable$ to$ \
connect$ at$ this$ time
MTA 故障诊断实例
本节介绍如何一步一步地对特定的 MTA 问题进行故障诊断。在本例中,收件人没有收到邮件的附件。注意:为了和 MIME 协议术语保持一致,本节中将“附件”称为“邮件部分”。上述故障诊断技术用于识别邮件部分在何处和为何消失。(请参阅“标准 MTA 故障诊断程序”)。通过使用下列步骤,可确定邮件通过 MTA 的路径。此外,也可确定邮件部分是在邮件进入邮件队列之前还是之后消失的。要做到这一点,需以手动方式停止和运行通道,捕获相关文件。
备注: 用手动方式启动的邮件通过通道时,必须运行作业控制器。
识别邮件路径中的通道
通过识别邮件路径中有那些通道,可将 master_debug 和 slave_debug 两个关键字用于相应的通道。这些关键字在通道的主日志文件和从属日志文件中生成调试输出;而主程序和从属程序的调试信息又反过来有助于识别邮件部分的消失点。
把 log_message_id=1 添加到 /server-root/msg-instance/imta/config. 目录下的 option.dat 文件中。使用这个参数,就可以查看邮件 ID:在 mail.log_current 文件中的标题行。
运行 imsimta restart dispatcher 来重新启动 SMTP 服务器。
- 尽管有不同方法识别通道,建议使用如下方法:
在 UNIX 平台上,用 grep 命令查找邮件 ID:在目录 /server-root/msg-instance/log/imta/ 中的 mail.log_current 文件中的标题行。在 Windows NT 平台上,使用 find 命令。
一旦找到邮件 ID:标题行,寻找 E(入队)和 D(出队)记录以确定邮件路径。有关记录日志条目代码的详细说明,请参阅“MTA 日志条目格式”。有关此例,请参阅下列 E 和 D 记录:
29-Aug-2001 10:39:46.44 tcp_local conversion E 2 ...
29-Aug-2001 10:39:46.44 conversion tcp_intranet E 2 ...
29-Aug-2001 10:39:46.44 tcp_intranet D 2 ...
- 左侧通道是源通道,右侧通道是目标通道。此例中,E 和 D 记录表示邮件路径是从通道 tcp_local 到通道 conversion,最后到通道 tcp_intranet。
手工启动和停止通道以收集数据
本节介绍如何手工启动和停止通道。有关详情,请参阅“启动和停止单个通道”。通过手工启动和停止邮件路径中的通道,可在 MTA 处理的不同阶段保存邮件和日志文件。这些文件以后用于“识别邮件崩溃点”。
在 /server-root/msg-instance/imta/config 目录下的 option.dat 文件中设置 mm_debug=5,以提供详实的调试信息。
把 slave_debug 和 master_debug 这两个关键字添加到 /server-root/msg-instance/imta/config 目录下的 imta.cnf 文件中的相应通道中。
从发送带有邮件部分的邮件的远程系统将 slave_debug 关键字用于入站通道(或邮件在初始会对话过程中切换到的任何通道)上。在此例中,slave_debug 关键字被添加到 tcp_local 通道。
使用 imsimta qm stop 和 imsimta qm start 这两个命令手工启动和停止特定的通道。有关使用这些关键字的详细说明,请参阅“启动和停止单个通道”。把 master_debug 关键字添加到其他邮件经过并在“识别邮件路径中的通道”被识别的通道上。在此例中,master_debug 关键字应添加到 conversion 和 tcp_intranet 通道上。
运行命令 imsimta restart dispatcher 以重新启动 SMTP 服务器。
在邮件进入一个通道时,如果已被 imsimta qm stop 命令停止则会在通道中停止。有关详细信息,请参阅 3。
在手工运行邮件路径的下一个通道之前,复制并重新命名邮件文件。请看下面这个 UNIX 平台的例子:
重新执行通道中邮件处理,并入队到下一个邮件路径的目标通道。要实现此步骤,需使用 imsimta qm start 命令。
建议每次捕获和复制邮件时利用扩展名对邮件进行编号,以便识别邮件处理的顺序。
- # cp ZZ01K7LXW76T7O9TD0TB.00 ZZ01K7LXW76T7O9TD0TB.KEEP1
- 邮件文件通常驻留在类似于
/server-root/msg-instance/imta/queue/destination_channel/001 等目录中。destination_channel 是邮件要通过的下一个通道(例如:tcp_intranet)。如果希望在 destination_channel 目录中创建子目录(如 001,002 等),需将关键字 subdirs 添加到通道。
复制并保存相关通道的日志文件(例如:tcp_intranet_master.log-*),日志文件位于 /server-root/msg-instance/log/imta/. 目录下。选择具备所跟踪邮件数据的适当的日志文件。确保所复制的文件与邮件进入通道时的时间戳和主题标题相匹配。以 tcp_intranet_master.log-* 为例,可将文件保存为 tcp_intranet_master.keep,这样文件就不会被删除。
邮件文件和日志文件一经复制就移除调试选项。
- 在步骤 7 中复制的日志文件应与在步骤 5 中复制的邮件文件相关联。假设停止了所有丢失邮件部分的通道,则应保存 conversion_master.log-* 和 tcp_intranet_master.log-* 文件。还应保存源通道日志文件 tcp_local_slave.log-*。此外,应在每个目标通道保存相关邮件文件的副本:来自 conversion 通道的 ZZ01K7LXW76T7O9TD0TB.KEEP1 和来自 tcp_intranet 通道的 ZZ01K7LXW76T7O9TD0TB.KEEP2。
当完成启动和停止通道程序后,应已具备下列可用来对问题进行故障诊断的文件:
检查 tcp_local_slave.log-* 文件以确定邮件在进入邮件队列时是否有邮件部分。
- 所有文件都应具有与邮件 ID 相匹配的时间戳和邮件 ID 值:mail.log_current 记录中的标题行。注意当邮件退回发件人时例外,这些退回的邮件会具有与原邮件不同的邮件 ID 值。
调查邮件文件副本以发现邮件部分在何处被更改或丢失。
- 观察 SMTP 对话和数据以发现从客户机发送来的是什么。
- 如果邮件部分没有在 tcp_local_slave.log-* 文件中出现,那么问题出在邮件进入 MTA 之前。这就造成邮件在没有邮件部分的情况下入队。如果是这种情况,问题可能已出现在发件人的远程 SMTP 服务器上或发件人的客户机上。
查看邮件的最终目的地。
- 如果任何邮件文件显示邮件部分被更改或丢失,需检查上一个通道的日志文件。例如,如进入到 tcp_intranet 通道的邮件的邮件部分被更改或丢失,则应查看 conversion_master.log-* 文件。
- 如果邮件部分看上去在 tcp_local_slave.log,邮件文件(例如:ZZ01K7LXW76T7O9TD0TB.KEEP1),以及 channel_master.log-* 文件中没有改变的话,那么 MTA 没有更改邮件,邮件部分在通向最终目的地路径的下一个步骤时消失。
- 如果最终目的地是 ims-ms 通道(邮件存储库),那么可从服务器下载邮件到客户机,以此确定邮件部分是否在这一传输过程中或在这之后丢失。如果目标通道是 tcp_* 通道,那么应转到邮件路径中的 MTA。假设它是一个 iPlanet Messaging Server MTA,则应重复整个故障诊断过程。(请参阅“识别邮件路径中的通道”,“手工启动和停止通道以收集数据”,和本节)如果那个 MTA 不在管理范围内,那么报告问题的用户应与该特定网站联系。
常见 MTA 问题和解决方案
本节列出了 MTA 配置和操作的常见问题和解决方案。
更改对配置文件或 MTA 数据库不生效
更改对配置文件或 MTA 数据库不生效
如果对配置、映射、转换、安全、选项或别名文件的更改不生效,则应检查是否执行了下列步骤:
MTA 可发送外发的邮件但不接收入站邮件
大多数 MTA 通道依靠从属程序(或称通道程序)接收入站邮件。有关 MTA 支持的一些传输协议(比如 TCP/IP 和 UUCP),应确保传输协议激活 MTA 从属程序而不是它的标准服务器。将自带的 sendmail SMTP 服务器替换为 MTA SMTP 服务器作为 iPlanet Messaging Server 安装的一部分来执行。详细信息,请参阅针对 UNIX 的 iPlanet Messaging Server Installation Guide。对于多线程 SMTP 服务器来说,SMTP 服务器的启动受 Dispatcher 控制的。如果 Dispatcher 配置使用的 MIN_PROCS 值大于或等于 SMTP 服务的那个值,那么总应有至少一个 SMTP 服务器进程在运行(可能更多,这取决于 SMTP 服务的 MAX_PROCS 值)。imsimta process 命令也可用于检查 SMTP 服务器进程的存在。详细说明,请参阅 iPlanet Messaging Server Reference Manual 中关于 MTA 命令行实用程序一章。
外来 SMTP 连接超时
外来 SMTP 连接超时常常与系统资源及其分配相关。下列技术可用语识别外来 SMTP 连接超时的原因:
检查可允许多少外来 SMTP 连接同时存在。这是由 MAX_PROCS 和 MAX_CONNS 这两个 SMTP 服务的 dispatcher 设置控制的;允许同时存在的连接数量即为 MAX_PROCS*MAX_CONNS。若可提供系统资源,在使用效率过低的情况下可考虑增加该连接数量。
记住,如果系统超过负荷并过度扩展,超时是难以完全避免的。另一个可使用的技术是打开 TELNET 会话。在下面的例子中,用户连接到 127.0.0.1 端口 25。一旦连接上,220 标志区即被退返回。例如:
telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 budgie.sesta.com -- Server ESMTP (iPlanet Messaging Server 5.1 (built May 7 2001))
如果 220 标志区的响应时间较慢,并且在 SMTP 服务器上运行 pstack 命令显示以下 iii_res* 功能(这些功能表明正在执行一名字解析查找。):
- 如果已连接上并接收了一个 220 标志区,但附加命令(如 ehlo 和邮件发件人)没有响应,那么应运行 imsimta test -rewrite 以保证配置正确。若正在使用 imsimta dirsync 命令,应确保此命令最近运行过。有些情况下,假设 dirsync 失败,SMTP 服务器中的命令不接收响应。在这种情况下,只要首先移除 dirsync 锁定文件,运行 imsimta dirsync -F 就会解决问题。
febe2c04 iii_res_send (fb7f4564, 28, fb7f4de0, 400, fb7f458c, fb7f4564) + 142c
febdfdcc iii_res_query (0, fb7f4564, c, fb7f4de0, 400, 7f) + 254
也可将 slave_debug 关键字放置在处理跨越 TCP/IP 的外来 SMTP 邮件的通道上,通常就是 tcp_local 和 tcp_intranet。这样做之后,查看最新的 tcp_local_slave.log-uniqueid 文件以识别超时邮件的任何特殊特征。例如,若带有大量收件人的来件超时,可考虑在通道上使用 expandlimit 关键字。
- 那么主机很可能按相反顺序进行名字解析查找,即使是在像 localhost/127.0.0.1 的常见名字对。要防止类似的性能降低,应重新排列 /etc/nsswitch.conf 文件中的主机查找。这需要更改来自 /etc/nsswitch.conf 文件中的下列各行,从:
hosts: dns nis [NOTFOUND=return] files
- 到:
hosts: files dns nis [NOTFOUND=return]
- 在 /etc/nsswitch.conf 文件中进行这种更改可提高性能。让较少的 SMTP 服务器不得不处理邮件,而不是让太多的 SMTP 服务器不得不执行不必要的查找。
邮件未入队
在 TCP/IP 传递中遇到的错误通常是瞬时的; MTA 在遇到问题时一般会保留邮件并定期重试。在某些主机上经历周期性中断的同时其他主机连接工作良好,这对于大型网络是很常见的。要想验证此问题,需检查日志文件中与传递尝试相关的错误。可看到诸如“Fatal error from smtp_open”之类的出错信息。类似错误并非罕见并通常与瞬时性网络问题相关。若需调试 TCP/IP 网络问题,可使用诸如 PING、TRACEROUTE 和 NSLOOKUP 这类的实用程序。下面的例子显示的的步骤可用来发现为何一邮件滞留在队列中等待传递到 xtel.co.uk。要确定邮件为何没有出队,可重新创建 MTA 用来跨越 TCP/IP 传递 SMTP 的步骤。
% nslookup -query=mx xtel.co.uk (1)
Server: LOCALHOST
Address: 127.0.0.1
Non-authoritative answer:
XTEL.CO.UK preference = 10, mail exchanger = nsfnet-relay.ac.uk (2)
% telnet nsfnet-relay.ac.uk 25 (3)
Trying... [128.86.8.6]
telnet: Unable to connect to remote host: Connection refused
使用 NSLOOKUP 实用程序检查本主机存在什么 MX 记录,如果有的话。如果不存在 MX 记录,那么应尝试直接连接到主机。如果存在 MX 记录,则必须连接到指定的 MX 转发上。MTA 首先满足首选的 MX 信息,除非明确配置不这样做。还可参阅“TCP/IP MX 记录支持”。
如果在不使用 DNS 的 TCP/IP 网络上运行 iPlanet Messaging Server,可省略步骤(1)和(2)。作为替代,可使用 TELNET 直接访问有问题的主机。注意应使用与 MTA 所用相同的主机名。查看从 MTA 最后一次尝试开始的相关日志文件以确定主机名。如果正在使用主机文件,则应确保主机名信息是正确的。我们强烈建议您使用 DNS 而不是主机名。在此例中,DNS(域名服务)返回 xtel.co.uk 的指定 MX 转发的名称。这是 MTA 实际连接的主机。如果列出不止一个 MX 转发,MTA 会依次尝试每个 MX 记录,最先尝试带有最小的首选值的记录。
如果确实已连接到远程主机,则应检查该主机是否通过使用 TELNET 接受入站 SMTP 连接到 SMTP 服务器端口 25。
备注: 如果在没有指定端口的情况下使用 TELNET,将发现远程主机接受普通的 TELNET 连接。这并不表明该主机也接受 SMTP 连接;很多系统都接受常规的 TELNET 连接但却拒绝接受 SMTP 连接,反之亦然。因此,应对 SMTP 端口进行不可缺省的测试。
- 在上一个例子中,远程主机拒绝接受到 SMTP 端口的连接。这就是 MTA 无法传递邮件的原因。连接被拒绝可能是由于远程主机的错误配置或远程主机上的某种资源耗尽。在这种情况下,无法在本地解决问题。通常应让 MTA 继续重试传递邮件。
注意如果在使用交互式测试检测 TCP/IP 主机连通性时没有遇到问题,那么很可能在 MTA 的最后尝试传递邮件的过程中问题就已经解决了。可在适当通道上重新运行 imsimta submit tcp_channel 以查看邮件是否正在出队。
MTA 邮件未传递
除了邮件传输问题,还有两个常见可造成邮件队列邮件不被处理的问题:
队列缓存与队列目录中的邮件不同步。等待传递的 MTA 队列子目录中的邮件文件被输入到内存中的队列缓存中。通道程序在运行时会参考这个队列缓存来确定要传递队列中的哪些邮件。也会有这样的情况:队列中有邮件文件,但却没有相应的队列缓存条目。
要检查证实一特定文件是否存在于队列缓存中,可使用 imsimta cache -view 实用程序;如果文件不在队列缓存中,那么队列缓存就需要进行同步。
由于不能创建其处理日志文件,通道处理程序无法运行。请查看访问权限,磁盘空间和配额。
如果在将队列缓存同步后,邮件仍未传递,则应重新启动作业控制器。这就需要运行 imsimta restart job_controller 命令。
- 队列缓存通常每四个小时同步一次。如有必要,可使用 imsimta cache -sync. 命令手工重新同步缓存。一经同步,通道程序就会在处理完新邮件之后处理原先未处理的邮件。如果希望更改默认同步间隔时间(4 小时),则应修改
/server-root/msg-instance/imta/config 目录下的 job_controller.cnf 文件,在文件中添加 sync_time=timeperiod,其中 timeperiod 反映了进行队列缓存同步的频度。注意 timeperiod 必须大于 30 分钟。在下面的例子中,通过把 sync_time=02:00 添加到 job_controller.cnf 中的 global defaults(全局默认设置)节,队列缓存间隔时间被修改为 2 小时:
! VERSION=5.0
!IMTA job controller configuration file
!
!Global defaults
tcp_port=27442
secret=N1Y9[HzQKW
slave_command=NULL
sync_time=02:00
- 可在运行 imsimta cache -sync 后运行 imsimta submit channel 清除待处理邮件。请注意如果待处理邮件过大(大于 1000)的话,清除过程可能需要较长时间,这一点很重要。
- 要获取队列缓存的概括信息,可运行imsimta qm -maint dir -database -total。
循环邮件
如果 MTA 检测出一邮件是循环的,该邮件将被退出作为 .HELD 文件。请参阅“诊断和清理 .HELD 邮件”。某些情况可导致产生 MTA 无法检测的邮件循环。第一步是确定邮件为何循环。应当在有问题邮件文件还在 MTA 队列区域时查看该文件的一个副本,查看与有问题邮件相关的 MTA 邮件日志条目(如果在有问题通道的 MTA 通道配置文件中启用了 logging 通道关键字的话),以及查看有问题通道的 MTA 通道调试日志文件。确定有问题邮件的发件人:和收件人:地址,查看收件箱:标题行,并查看邮件结构(邮件内容封装类型),均可帮助查明所遇到的邮件循环属于哪种类型。
Postmaster 地址损坏
剥离收件箱:标题行是为了防止 MTA 检测循环邮件。
- MTA 要求 Postmaster 地址是一个可接收邮件的功能地址。如果发送给邮件管理员的邮件是循环的,需查看配置中是否具有一个指向可接收邮件的帐户的正确 Postmaster 地址。
其他邮件系统对通知邮件的错误处理正在生成再包装邮件以响应通知邮件。
- 常规邮件循环的检测是基于收件箱标题行的。如果收件箱标题行被剥离(显式地针对 MTA 系统自身,或针对类似与防火墙的另一系统),则会干扰邮件循环的正确检测。在这些情况下,需检查是否有不希望的收件箱标题行剥离的发生。还要检查邮件发生循环的深层原因。可能的原因包括:系统名分配问题或系统未配置为能辨识其自有名称的变体,DNS 问题,有问题系统缺少可靠的地址信息,用户地址转发错误等。
- Internet 标准要求通知邮件(正在传递或退回邮件的报告)具有一个空的信封发件人:地址以防邮件循环。然而,一些邮件系统没有正确处理这样的通知邮件。在转发或退回通知邮件时,这些邮件系统可能会插入一个新的信封发件人:地址。这就会导致邮件循环。解决方法是修正错误处理通知邮件的那个邮件系统。
诊断和清理 .HELD 邮件
如果 MTA 检测出邮件在服务器和通道之间正进行退回处理,传送将被暂停,邮件将被储存在 /server-root/msg-instance/imta/queue/channel 中的后缀为 .HELD 的文件中。通常,邮件循环的出现是因为每个服务器或通道都认为另外的服务器有责任传送邮件。例如,一个最终用户可能会设置一选项把两个不同邮件主机上的邮件相互转发。在其 sesta.com 帐户上,最终用户启用目标为他的 varrius.com 帐户的邮件转发。然后,在忘了已启用了这一设置的情况下,该最终用户又在其 varrius.com 帐户上设置目标为 sesta.com 帐户的邮件转发。
MTA 的错误配置也可能导致循环。例如,MTA 主机 X 认为 mail.sesta.com 的邮件发给了主机 Y,但是主机 Y 认为主机 X 应该处理 mail.sesta.com 的邮件;结果就是,主机 Y 把邮件退回给主机 X。
在这种情况下,邮件被 MTA 忽略且不会继续尝试传送。出现这种问题时,查看邮件的标题行以确定哪个服务器或通道退回了邮件。必要时可修改条目。
将扩展名 .HELD 重命名为除 00 外的任意两个数字。例如,把 .HELD 改成 .06。
也许要重复执行这些步骤,因为邮件有可能再次被标记为 .HELD,原因是收件箱:标题行的累积。
备注: 在重命名 .HELD 文件前,确定邮件已经停止循环。
接收的邮件为编码邮件
MTA 发出的邮件以编码格式接收。例如:在用 MTA 解码器命令 imsimta decode 读取时,这些邮件在显示时为未编码邮件。有关详情,请参阅 iPlanet Messaging Server Reference Manual。
RFC 821 规定,SMTP 协议只允许 ASCII 字符(一种七位字符集)的传输。事实上,在未经协调的情况下通过 SMTP 传输八位字符是非法的,并且都知道会给 SMTP 服务器带来一系列问题。例如,SMTP 服务器可能产生计算限制循环。邮件会一遍一遍地被发送。八位字符可以使 SMTP 服务器崩溃。最后,八位字符集将使不能处理八位字符数据的浏览器和邮箱崩溃。
过去,SMTP 客户在处理包含八位数据的邮件时只有三种选择:将其作为无法传递邮件退回发件人,将邮件编码,或者将其发送造成对 RFC 821 的直接违规。但是有了 MIME 和对 SMTP 的扩展,现在有标准编码方法,可以用来利用 ASCII 字符集给八位数据编码。
在上面的例子中,收件人接收到一个其 MIME 内容类型为 TEXT/PLAIN 的编码邮件。远程 SMTP 服务器(MTA SMTP 客户机向其传输邮件)不支持八位数据的传输。由于原邮件包含八位字符,MTA 不得不对邮件进行编码。
服务器端规则(SSR)不生效
一过滤器是由一个或多个应用于邮件的条件操作组成的。由于过滤器是在服务器上储存和检测的,因而常常被称为服务器端规则(SSR)。目录同步命令(imsimta dirsync)用有关用户过滤器的信息更新 MTA 的 SSR 数据库。SSR 数据库存放短过滤器(小于 1016 字节)而一个 LDAP DN 则用于长过滤器。请注意,只有在 imsimta dirsync 命令更新了目录服务器之后,MTA 才能识别用户过滤器的更改。有关 SSR 的详细说明,请参阅“第二部分:邮箱过滤器”。
要检查 MTA 的用户过滤器,用命令:
# imsimta test -rewrite -debug -filter user@domain 此外,可以把关键字 slave_debug 添加在 tcp_local 通道上以观察过滤器是如何应用的。结果将显示在 tcp_local_slave.log 文件中。一定要把 mm_debug=5 添加到 /server-root/msg-instance/imta/config 目录下的 option.dat 文件中,以便获得足够的调试信息。
使用 imsimta dirsync 命令时,一定要确认 ims-ms 通道是有标记的过滤器。
ssrd:$a
和
fileinto $u+$s@$d
在 /server-root/msg-instance/imta/config 目录下的 imta.cnf 文件中。使用 imsimta dirsync 命令时,确认 imsimta dirsync 命令能正确同步过滤器信息。这需要从 /server-root/msg-instance/. 目录执行以下命令。一定要作为邮件服务器用户来执行这些命令:
# configutil -l -o service.imta.ssrenabled -v true
OK SET
# configutil | fgrep ssr
local.imta.ssrenabled = yes
service.imta.ssrenabled = true
如果过滤器出现了语法问题,查看 tcp_local_slave.log-* 文件中的下列信息:
Error parsing filter expression:...
一般出错讯息
MTA 不能启动时,一般出错讯息出现在命令行上。在这部分中介绍和诊断一般出错讯息。
备注: 要诊断 MTA 配置须,使用 imsimta test -rewrite -debug 实用程序来检查 MTA 的地址重写和通道映射处理。使用这一实用程序可以在不发送邮件的情况下检查配置。请参阅“检查 MTA 配置”。
MTA 的副组件也可能导致本章中没有介绍的出错讯息的产生。请参阅 iPlanet Messaging Server Reference Manual 中有关 MTA 命令行实用程序和配置的章节,有关各个副组件的详细说明,参见第 6 篇到第 10 篇各章。这章包括下列出错类型:
mm_init 中的错误
mm_init 中的错误
mm_init 中的错误通常表明 MTA 配置有问题。运行 imsimta test -rewrite 实用程序这些错误就会被显示出来。如 imsimta cnbuild 这样其他实用程序,通道、服务器或浏览器也都可能返回这样的错误。
发现重复别名
两个别名文件条目左侧一样。须找到并取消复制。寻找如下出错讯息:error line #XXX 其中 XXX 是行号。修正这一行上的重复别名。
在通道表里的重复主机
出错讯息说明 MTA 配置有两个正式主机名相同的通道定义。注意,MTA 配置文件(imta.cnf)中的重写规则(上半部分)里的多余的空行可使 MTA 把配置文件的剩余部分视为通道定义。一定要保证文件的第一行不是空行。因为很多重写规则有相同的模式(左侧),MTA 据此把它们视为有着非唯一正式主机名的通道定义。检查 MTA 配置,看是否存在任何有重复正式主机名的通道定义以及文件上半(重写规则)部分是否有不正确的空行。
发现重复映射名
这个讯息说明两个映射表有相同的名称,其中一个重复映射表应移除。但是映射表中的格式错误有可能使 MTA 把别的内容误认为是映射表名。例如,对映射表条目的错误缩排会让 MTA 认为条目左侧其实是映射表名。检查映射文件的一般格式和映射表名。
备注: 应以一空行打头,后随任何带映射表名的行。但是映射表条目之间不得有任何空行。
映射名过长
这个错误表示映射名太长应该缩短。映射文件格式错误可能会使 MTA 把其他内容误认为是映射表名。例如,对映射表条目的错误缩排会让 MTA 认为条目左侧其实是映射表名。检查映射文件和映射表名。
初始化ch_facility 时出错:编译的字符集版本不匹配
这一讯息说明,需要用命令 imsimta chbuild. 重新编译并重新安装编译的字符集表。有关详情,请参阅 iPlanet Messaging Server Reference Manual。
初始化 ch_facility 时出错:无空间
这一出错讯息一般表示需调整 MTA 字符集内部表的大小然后重建编译的字符集表,需使用的命令如下:imsimta chbuild -noimage -maximum -option
imsimta chbuild请核实,进行此更改之前没有重新编译或重新启动任何别的内容。参考 iPlanet Messaging Server Reference Manual 中“MTA 命令行实用程序”一章可获得更多的关于 imsimta chbuild 的信息。
本地主机别名或固有名称对系统过长
这一错误说明本地主机别名或固有名称太长(在一通道块的第二个及随后的名称中的可选右侧)。但是 MTA 配置文件里早先的一些语法错误(比如重写规则里的多余的空行)可能使 MTA 把其它内容误认为是通道定义。除了检查配置文件里所提到的那行外,也要检查这一行以上的内容以便找到其他语法错误。特别是当 MTA 发现错误的那一行原本是一条重写规则时,一定要检查在它上面是否有多余的空行。
通道没有正式主机名
这一错误说明,一通道定义块缺少必需的第二行(正式主机名行)。有关通道定义块的详细信息,请见 iPlanet Messaging Server Reference Manual 和第 8 篇 “配置通道定义”中的有关MTA 配置和命令行实用程序的章节。每个通道定义块的前后都必需有一空行。但是在块通道名和通道定义的正式主机名行之间不能出现空行。还要注意,MTA 配置文件的重写规则部分不允许有空行。
正式主机名过长
通道的正式主机名(通道定义块的第二行)长度限制在四十字节内。如想让通道的正式主机名超过这个长度,把它缩短成一个占位名称,然后用重写规则使长名称和短正式名称匹配。这种情况在处理 l(本地)通道主机名时可能出现。例如:
注意,当使用 l(本地)通道时,需要使用反向映射表。有关用法和语法的信息,请参阅 iPlanet Messaging Server Reference Manual 中的“MTA 配置”一章。
MTA 配置文件中早期的一些语法错误(例如,重写规则里多余的空行)可能使 MTA 把其他内容误认成通道定义。这可能导致一原本为重写规则的文本被误认成正式主机名。除了检查配置文件里所提到的那行外,也要检查这一行以上的内容以便找到其他语法错误。特别是当 MTA 发现错误的那一行原本是一条重写规则时,一定要检查在它上面是否有多余的空行。
编译的配置版本不匹配
imsimta cnbuild 实用程序的功能之一就是把 MTA 配置信息编译成可以快速装载的图像。编译格式定义得十分严格并且在不同的 MTA 版本之间经常更改。小的更改可能作为补丁版的一部分出现。当进行这种更改时,一内部版本字段也被更改,以便检测出不相容的格式。当检测出不相容格式时,MTA 组件就会中断并显示上面的错误。解决这个问题的办法就是用命令 imsimta cnbuild 生成一个新的编译的配置。
另一个不错的办法是用 imsimta restart 命令来重新启动任何驻留的 MTA 服务器进程,这些进程即可获取更新了的配置信息。
交换空间错误
为了确保正确操作,应在邮件传输系统上配置足够的交换空间。配置不同,必需的交换空间大小也不同。一个一般适用的建议是:交换空间至少应为主要内存的三倍。jbc_channels: chan_execute [1]: fork failed: Not enough space
在作业控制器的日志文件可能会看到这样的出错信息。其他交换空间错误因配置不同而有所不同。
使用下列命令可以确定还剩多少交换空间和已经用了多少交换空间:
Solaris 系统:swap -s(当 MTA 进程忙碌时),ps -elf,或 tail /var/adm/messages
HP-UX 系统:swapinfo or tail /var/adm/syslog/syslog.log
Windows NT 系统:如果在别处需要更大空间或速度更快的驱动器,可以在默认硬盘之外的驱动器上设置页面调度文件大小(例如 C:\)。检查可用空间或设置新的页面调度文件大小,遵循以下步骤:
文件打开或创建错误
为了发送一封邮件,MTA 读取配置文件并在 MTA 邮件列队目录中创建邮件文件。对于 MTA 或其他用非 MTA 的 SDK 写的程序,配置文件都必须是可读的。在安装过程中,已给这些文件赋予了适当的权限。可创建配置文件的 MTA 实用程序和其他程序也赋予权限。如果文件受系统管理者、其他授权用户或通过针对站点的程序的保护,MTA 可能就不能读配置信息了。这会导致“打开文件”错误或其他无法预计的结果。在读取配置文件遇到问题时,imsimta test -rewrite 实用程序还会报告其他信息。请参见 iPlanet Messaging Server Reference Manual 的 MTA 有关章节中的 imsimta test -rewrite 说明文档。如果 MTA 象是从授权帐户而不是从非授权帐户发挥功能,MTA 表目录中的文件权限很可能是产生问题的原因。检查配置文件及其目录的权限。请参阅“检查关键文件的所有权”。
“文件创建”错误通常表明在 MTA 邮件列队里创建邮件文件时出了问题。有关诊断文件创建问题请参见“检查邮件队列目录”。
非法主机/域错误
当地址通过浏览器提供给 MTA 时可能会出现这种错误。或者,此错误可能会作为出错退回邮件而被延迟并退回。在这两种情况下,这种出错讯息都表明 MTA 不能把邮件传递给指定的主机。要确定邮件为何不能送到特定的主机,需要遵循下面的故障诊断程序:
证实有问题的地址没有拼错、没有被错误转录以及没有使用已经不存在的主机名或域名。
通过imsimta test -rewrite 实用程序运行有问题的地址。如果实用程序仍然返回“illegal host/domain(非法的主机/域)”错误,说明 MTA 在 imta.cnf 文件和其他文件中没有处理这一地址规则。证实 MTA 的配置是正确的,即正确地回答了所有配置问题,而且一直保持配置信息及时更新。
如果 imsimta test -rewrite 没有在地址上发生错误,MTA可以确定如何处理地址,但是网络传输将不接受该地址。欲获得其他详细信息可以查阅相关的日志文件。瞬时网络路由或名字服务错误不会导致返回出错讯息,尽管严重错误配置的域名服务器可能引起这些问题。
如已连接到 Internet,检查证实已正确配置了 TCP/IP 通道以支持 MX 记录查找。很多域地址不能从 Internet 上直接访问,而是需要邮件系统正确解析 MX 条目。如已连接到 Internet,并且 TCP/IP 被配置为支持 MX 记录,则 MTA 也应配置为启用 MX;参见 TCP/IP 连接和 DNS 查找支持“TCP/IP 连接和 DNS 查找支持”以获得详细说明。如果 TCP/IP 包没有配置为支持 MX 记录查找,则将无法达到只针对 MX 的域。
SMTP 通道中的错误:os_smtp_* errors
下列错误不一定是 MTA 错误:如 os_smtp_open,os_smtp_read 以及 os_smtp_write 这样的 os_smtp_* 错误。这些错误是在 MTA 报告在网络层遇到问题时生成的。例如,os_smtp_open 错误意味着网络对远程端的连接无法打开。由于地址错误或通道配置错误,MTA 可能被配置成与一个无效系统连接。os_smtp_* 错误通常是由于 DNS 或网络连接问题引起的,尤其是这是先前使用的通道或地址时。os_smtp_read 或 os_smtp_write 错误通常表明连接被另一端中止或网络引起了问题。网络和 DNS 问题的本质常常是瞬时性的。偶然出现的 os_smtp_* 错误一般不用太担心。但是如果这些错误常常出现,这可能说明存在一潜在的网络问题。
要获取有关特定 os_smtp_* 错误的详细说明,可以启用有问题通道上的调试功能。查看调试通道的日志文件,可以显示有关 SMTP 对话的详细内容。尤其要查看 SMTP 对话过程中网络问题出现的时间。这个时间可能暗示网络问题或远程端问题。在某些情况下,可能还需要进行网络层调试(例如 TCP/IP 信息包跟踪),以确定发送和接收了什么。
上一页 目录 索引 下一页
(c) 2002 年 Sun Microsystems, Inc. 版权所有。
更新日期:2002 年 2 月 27 日