本节说明如何逐步对特定 MTA 问题进行故障排除。在本例中,邮件收件人没有收到电子邮件消息的附件。注意:为了与 MIME 协议术语保持一致,在本节中“附件”被称为“邮件组成部分”。前面提到的故障排除技巧可用来识别邮件组成部分消失的位置和原因(请参见26.2 标准 MTA 故障排除过程)。通过使用以下步骤,可以确定邮件通过 MTA 的路径。此外,您还可以确定邮件组成部分是在邮件进入邮件队列之前还是之后消失的。要实现此目的,您需要手动停止和运行通道以捕获相关文件。
手动使邮件通过通道时,作业控制器必须正在运行。
通过识别邮件路径中的通道,您可以将 master_debug 和 slave_debug 关键字应用于相应的通道。这些关键字将在通道的主日志文件和从日志文件中生成调试输出,反过来,主调试信息和从调试信息将帮助识别邮件组成部分消失的位置。
在目录 /msg-svr-base /config. 中的 option.dat 文件中添加 log_message_id=1。使用此参数,您可以在mail.log_current 文件中看到邮件的 ID: 标题行。
运行 imsimta cnbuild 以重新编译配置。
运行 imsimta restart dispatcher 以重新启动 SMTP 服务器。
使最终用户重新发送带有邮件组成部分的邮件。
确定邮件通过的通道。
尽管识别通道有各种方法,但建议使用以下方法:
在 UNIX 平台上,使用 grep 命令在目录 / msg-svr-base/log 的 mail.log_current 文件中搜索邮件的 ID: 标题行。
找到邮件的 ID: 标题行之后,查找 E(入队列)记录和 D(出队列)记录以确定邮件的路径。有关日志记录条目代码的详细信息,请参阅25.3.1 了解 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 通道。
本节说明了如何手动启动和停止通道。请参见26.2.7 启动和停止各个通道。通过启动和停止邮件路径中的通道,您可以在 MTA 进程的不同阶段保存邮件和日志文件。这些文件随后将用于识别邮件故障点中介绍的内容。
在目录 /msg-svr-base/config 的 option.dat 文件中设置 mm_debug=5,以提供重要的调试信息。
将 slave_debug 和 master_debug 关键字添加到目录 /msg-svr-base/config 中 imta.cnf 文件中的相应通道。
在发送带有邮件组成部分的邮件的远程系统的入站通道(或初始对话期间邮件被切换到的任意通道),使用 slave_debug 关键字。本示例中,slave_debug 关键字被添加到 tcp_local 通道。
将 master_debug 关键字添加到邮件所通过的并在26.2.8.1 识别邮件路径中的通道中已经识别的其他通道。将被添加到 conversion 和 tcp_intranet 通道。
运行命令 imsimta restart dispatcher 以重新启动 SMTP 服务器。
使用 imsimta qm stop 和 imsimta qm start 命令手动启动和停止特定通道。有关使用这些关键字的详细信息,请参见26.2.7 启动和停止各个通道。
为启动捕获邮件文件的进程,请使最终用户重新发送带有邮件组成部分的邮件。
当邮件进入某个通道时,如果使用 imsimta qm stop 命令停止了该邮件,则该邮件将停留在此通道中。有关详细信息,请参见步骤 3。
在手动运行邮件路径中的下一个通道之前,复制并重命名邮件文件。请参见以下 UNIX 平台示例:
# cp ZZ01K7LXW76T7O9TD0TB.00 ZZ01K7LXW76T7O9TD0TB.KEEP1
邮件文件通常位于类似 / msg-svr-base/data/queue/destination_channel/001 的目录中。destination_channel 是邮件将通过的下一个通道(例如:tcp_intranet)。如果要在 destination_channel 目录中创建子目录(如 001、002 等等),请将 subdirs 关键字添加到通道中。
建议每次捕获和复制邮件时为该邮件的扩展名编号,以标识处理该邮件的顺序。
恢复通道中的邮件处理并将其加入邮件路径中的下一个目标通道队列。要执行此操作,请使用 imsimta qm start 命令。
复制并保存位于目录 /msg-svr-base/log 中的相应通道日志文件(例如:tcp_intranet_master.log-*)。选择包含您正在跟踪的邮件数据的相应日志文件。确保邮件进入通道时,复制的文件与该邮件的时间戳和主题标题相匹配。在 tcp_intranet_master.log-* 的示例中,可以将文件另存为 tcp_intranet_master.keep,这样文件就不会被删除。
重复步骤 5 至步骤 7 直到邮件到达其最终目标。
在步骤 7 中复制的日志文件应该与在步骤 5 中复制的邮件文件相关联。例如,如果在丢失邮件组成部分的情况下停止所有通道,则需保存 conversion_master.log-* 和 tcp_intranet_master.log-* 文件。也要保存源通道日志文件 tcp_local_slave.log-*。此外,还要保存每个目标通道中相应邮件文件的副本:conversion 通道中的 ZZ01K7LXW76T7O9TD0TB.KEEP1 和 tcp_intranet 通道中的 ZZ01K7LXW76T7O9TD0TB.KEEP2。
复制完邮件文件和日志文件后,删除调试选项。
检查 tcp_local_slave.log-* 文件以确定邮件进入邮件队列时是否有邮件组成部分。
查看 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。假定是 Messaging Server MTA,您将需要重复整个故障排除过程(请参见26.2.8.1 识别邮件路径中的通道、26.2.8.2 手动启动和停止通道以收集数据和本节内容)。如果另一个 MTA 不受您的管理,则报告问题的用户应与特定站点联系。