Sun Java System Messaging Server 6 2005Q4 管理指南

MTA 故障排除示例

本节说明了如何逐步对特定 MTA 问题进行故障排除。在本例中,邮件收件人没有收到电子邮件消息的附件。注意:为了与 MIME 协议术语保持一致,在本节中“附件”被称为“邮件组成部分”。前面提到的故障排除技巧可用来识别邮件组成部分消失的位置和原因(请参见标准 MTA 故障排除过程)。通过使用以下步骤,可以确定邮件通过 MTA 的路径。此外,您还可以确定邮件组成部分是在邮件进入邮件队列之前还是之后消失的。要实现此目的,您需要手动停止和运行通道以捕获相关文件。


注 –

手动使邮件通过通道时,作业控制器必须正在运行。


识别邮件路径中的通道

通过识别邮件路径中的通道,您可以将 master_debugslave_debug 关键字应用于相应的通道。这些关键字将在通道的主日志文件和从日志文件中生成调试输出,反过来,主调试信息和从调试信息将帮助识别邮件组成部分消失的位置。

  1. 在目录 /msg_svr_base/config 中的 option.dat 文件中添加 log_message_id=1。使用此参数,您可以在 mail.log_current 文件中看到邮件的 ID: 标题行。

  2. 运行 imsimta cnbuild 以重新编译配置

  3. 运行 imsimta restart dispatcher 以重新启动 SMTP 服务器。

  4. 使最终用户重新发送带有邮件组成部分的邮件。

  5. 确定邮件通过的通道。

    尽管识别通道有各种方法,但建议使用以下方法:

    1. 在 UNIX 平台上,使用 grep 命令在目录 /msg_svr_base/logmail.log_current 文件中搜索邮件的 ID: 标题行。

    2. 找到邮件的 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 进程的不同阶段保存邮件和日志文件。这些文件随后将用于识别邮件故障点中介绍的内容。

Procedure手动启动和停止通道

步骤
  1. 在目录 /msg_svr_base/configoption.dat 文件中设置 mm_debug=5,以提供重要的调试信息。

  2. slave_debugmaster_debug 关键字添加到目录 /msg_svr_base/config 中的 imta.cnf 文件中的相应通道。

    1. 在发送带有邮件组成部分的邮件的远程系统的入站通道(或初始对话期间邮件被切换到的任意通道),使用 slave_debug 关键字。本示例中,slave_debug 关键字被添加到 tcp_local 通道。

    2. master_debug 关键字添加到邮件所通过的并在识别邮件路径中的通道中已经识别的其他通道。将被添加到 conversiontcp_intranet 通道。

    3. 运行命令 imsimta restart dispatcher 以重新启动 SMTP 服务器。

  3. 使用 imsimta qm stopimsimta qm start 命令手动启动和停止特定通道。有关使用这些关键字的更多信息,请参见启动和停止各个通道

  4. 为启动捕获邮件文件的进程,请使最终用户重新发送带有邮件组成部分的邮件。

  5. 当邮件进入某个通道时,如果使用 imsimta qm stop 命令停止了该邮件,则该邮件将停留在此通道中。有关更多信息,请参见步骤 3

    1. 在手动运行邮件路径中的下一个通道之前,复制并重命名邮件文件。请参见以下 UNIX 平台示例:

      # cp ZZ01K7LXW76T7O9TD0TB.00 ZZ01K7LXW76T7O9TD0TB.KEEP1

      邮件文件通常位于类似 /msg_svr_base/data/queue/destination_channel/001 的目录中。destination_channel 是邮件将通过的下一个通道(例如:tcp_intranet)。如果要在 destination_channel 目录中创建子目录(如 001002 等等),请将 subdirs 关键字添加到通道中。

    2. 建议每次捕获和复制邮件时为该邮件的扩展名编号,以标识处理该邮件的顺序。

  6. 恢复通道中的邮件处理并将其加入邮件路径中的下一个目标通道队列。要执行此操作,请使用 imsimta qm start 命令。

  7. 复制并保存位于目录 /msg_svr_base/log 中的相应通道日志文件(例如:tcp_intranet_master.log-*)。选择包含您正在跟踪的邮件数据的相应日志文件。确保邮件进入通道时,复制的文件与该邮件的时间戳和主题标题相匹配。在 tcp_intranet_master.log-* 的示例中,可以将文件另存为 tcp_intranet_master.keep,这样文件就不会被删除。

  8. 重复步骤 5 至步骤 7 直到邮件到达其最终目标。

    步骤 7 中复制的日志文件应该与在步骤 5 中复制的邮件文件相关联。例如,如果在丢失邮件组成部分的情况下停止所有通道,则需保存 conversion_master.log-*tcp_intranet_master.log-* 文件。也要保存源通道日志文件 tcp_local_slave.log-*。此外,还要保存每个目标通道中相应邮件文件的副本:conversion 通道中的 ZZ01K7LXW76T7O9TD0TB.KEEP1tcp_intranet 通道中的 ZZ01K7LXW76T7O9TD0TB.KEEP2

  9. 复制完邮件文件和日志文件后,删除调试选项。

    1. 从目录 /msg_svr_base/config 中的 imta.cnf 文件的相应通道中删除 slave_debugmaster_debug 关键字。

    2. 重置 mm_debug=0,并删除目录 /msg_svr_base/config 中的 option.dat 文件的 log_message_id=1

    3. 使用 imsimta cnbuild 重新编译配置。

    4. 运行命令 imsimta restart dispatcher 以重新启动 SMTP 服务器。

Procedure识别邮件故障点

步骤
  1. 在完成启动和停止通道程序后,您应该具有可用于解决问题的以下文件:

    1. 每个通道程序中的邮件文件(例如 ZZ01K7LXW76T7O9TD0TB.KEEP1)的所有副本

    2. 一个 tcp_local_slave.log-* 文件

    3. 每个目标通道的一组 channel_master.log-* 文件

    4. 可以显示邮件路径的一组 mail.log_current 记录

      所有文件应该具有与mail.log_current 记录中的邮件 ID: 标题行相匹配的时间戳和邮件 ID 值。请注意有一个例外,当邮件被退回发件人时,这些退回的邮件将具有与原邮件不同的邮件 ID 值。

  2. 检查 tcp_local_slave.log-* 文件以确定邮件进入邮件队列时是否有邮件组成部分。

    查看 SMTP 对话和数据以查看从客户机发送的内容。

    如果邮件组成部分未出现在 tcp_local_slave.log-* 文件中,则问题出现在邮件进入 MTA 之前。结果是,邮件被排入队列而没带邮件组成部分。这种情况下,问题可能发生在发件人的远程 SMTP 服务器或发件人的客户机上。

  3. 审查邮件文件的副本以查看邮件组成部分被更改或丢失的位置。

    如果任一邮件文件显示邮件组成部分被更改或丢失,请检查以前的通道日志文件。例如,如果进入 tcp_intranet 通道的邮件中的邮件组成部分被更改或丢失,则应查看 conversion_master.log-* 文件。

  4. 查看邮件的最终目标。

    如果邮件组成部分看起来没有在 tcp_local_slave.log、邮件文件(例如:ZZ01K7LXW76T7O9TD0TB.KEEP1)和 channel_master.log-* 文件中更改,则 MTA 未更改邮件,邮件组成部分是在通向其最终目标的路径中的下一步上消失的。

    如果最终目标是 ims-ms 通道(邮件存储),则可以将邮件从服务器下载到客户机上,以确定邮件组成部分是在此传输期间还是在此之后丢失的。如果目标通道是 tcp_* 通道,则需要转至邮件路径中的 MTA。假定是 Messaging Server MTA,您将需要重复整个故障排除过程(请参见识别邮件路径中的通道手动启动和停止通道以收集数据和本节内容)。如果另一个 MTA 不受您的管理,则报告问题的用户应与特定站点联系。