系统管理指南:网络服务

邮件服务疑难解答过程和技巧

本节介绍了一些可用于解决邮件服务问题的过程和技巧。

Procedure如何测试邮件配置

要测试对配置文件所做的更改,请按照以下说明操作。

  1. 在包含已修订的配置文件的任何系统上重新启动 sendmail


    # svcadm refresh network/smtp:sendmail
    
  2. 从各个系统发送测试消息。


    # /usr/lib/sendmail -v names </dev/null
    
    names

    指定收件人的电子邮件地址。

    此命令会向指定的收件人发送一条空消息,并在监视器上显示该消息的活动。

  3. 通过将该消息发送至常规用户名,向您自己或本地系统中的其他人发送邮件。

  4. (可选的)如果已连接到网络,请按三个方向将邮件发送到其他系统中的某个用户。

    • 从主系统到客户机系统

    • 从客户机系统到主系统

    • 从一台客户机系统到另一台客户机系统

  5. (可选的)如果具有邮件网关,请将邮件从邮件主机发送到其他域,以确保中继邮件程序和主机的配置正确。

  6. (可选的)如果通过电话线设置了与另一台主机的 UUCP 连接,请将邮件发送到该主机的某个用户,并要求该用户回复邮件或在收到消息时与您联系。

  7. 要求某用户通过 UUCP 连接向您发送邮件。

    由于 sendmail 程序会将消息传递给 UUCP 进行传送,因此该程序无法检测消息是否已传送。

  8. 通过不同系统将消息发送到 postmaster,并确保消息传送到邮寄主管的邮箱。

如何检查邮件别名

以下示例说明了如何验证别名。


% mconnect

connecting to host localhost (127.0.0.1), port 25

connection open

220 your.domain.com ESMTP Sendmail 8.13.6+Sun/8.13.6; Tue, 12 Sep 2004 13:34:13 -0800 (PST)

expn sandy

250 2.1.5 <sandy@phoenix.example.com>

quit

221 2.0.0 your.domain.com closing connection

% 

在此示例中,mconnect 程序打开了一个与本地主机上的邮件服务器的连接,并允许您测试该连接。该程序以交互方式运行,因此可以发出各种诊断命令。有关完整说明,请参见 mconnect(1) 手册页。项 expn sandy 提供了扩展地址 sandy@phoenix.example.com。因此,您已验证了使用别名 sandy 时可以传送邮件。

使用本地范围和域范围的别名时,请记住避免产生循环和不一致的数据库。尤其要注意,在系统之间移动用户时应避免创建别名循环。

Procedure如何测试 sendmail 规则集

要检查 sendmail 规则集的输入和返回,请按照以下说明操作。

  1. 更改为地址测试模式。


    # /usr/lib/sendmail -bt
    
  2. 测试邮件地址。

    在最后一个提示符 (>) 下提供以下数字和地址。


    > 3,0 mail_address
    
    mail_address

    使用要测试的邮件地址。

  3. 结束会话。

    按 Control-D 组合键。


示例 13–5 地址测试模式输出

以下是地址测试模式的输出示例。


% /usr/lib/sendmail -bt

ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)

Enter <ruleset> <address>

> 3,0 sandy@phoenix

canonify           input: sandy @ phoenix

Canonify2          input: sandy < @ phoenix >

Canonify2        returns: sandy < @ phoenix . example . com . >

canonify         returns: sandy < @ phoenix . example . com . >

parse              input: sandy < @ phoenix . example . com . >

Parse0             input: sandy < @ phoenix . example . com . >

Parse0           returns: sandy < @ phoenix . example . com . >

ParseLocal         input: sandy < @ phoenix . example . com . >

ParseLocal       returns: sandy < @ phoenix . example . com . >

Parse1             input: sandy < @ phoenix . example . com . >

MailerToTriple     input: < mailhost . phoenix . example . com > 

     sandy < @ phoenix . example . com . >

MailerToTriple   returns: $# relay $@ mailhost . phoenix . example . com 

     $: sandy < @ phoenix . example . com . >

Parse1           returns: $# relay $@ mailhost . phoenix . example . com 

     $: sandy < @ phoenix . example . com . >

parse            returns: $# relay $@ mailhost . phoenix . example . com 

     $: sandy < @ phoenix . example . com . >

如何验证与其他系统的连接

mconnect 程序打开一个与指定主机上邮件服务器的连接,并允许您测试该连接。该程序以交互方式运行,因此可以发出各种诊断命令。有关完整说明,请参见 mconnect(1) 手册页。以下示例确认发送到用户名 sandy 的邮件是可传送的。


% mconnect phoenix



connecting to host phoenix (172.31.255.255), port 25

connection open

220 phoenix.example.com ESMTP Sendmail 8.13.1+Sun/8.13.1; Sat, 4 Sep 2004 3:52:56 -0700

expn sandy

250 2.1.5 <sandy@phoenix.example.com>

quit

如果无法使用 mconnect 连接到某个 SMTP 端口,请检查以下情况。

记录错误消息

邮件服务使用 syslogd 程序记录大多数错误消息。缺省情况下,syslogd 程序会将这些消息发送到一个称为 loghost 的系统,该系统可在 /etc/hosts 文件中指定。可以将 loghost 定义为保存整个 NIS 域的所有日志。如果未指定 loghost,则不会报告 syslogd 中的错误消息。

/etc/syslog.conf 文件用于控制 syslogd 程序转发消息的位置。可以通过编辑 /etc/syslog.conf 文件来更改缺省配置。为使所有更改生效,必须重新启动 syslog 守护进程。要收集有关邮件的信息,可在该文件中添加以下选项。

/etc/syslog.conf 文件中的以下项会将所有关键消息、提示性消息和调试消息的副本发送到 /var/log/syslog


mail.crit;mail.info;mail.debug			/var/log/syslog

在系统日志中,每一行都包含时间标记、生成该行的系统名称以及消息。syslog 文件可以记录大量信息。

该日志按级别顺序进行排列。在最低级别,仅记录异常情况。在最高级别,即使最普通和最不受关注的事件也会被记录。根据约定,10 以下的日志级别被视为“有用”级别。10 以上的日志级别通常用于调试。有关 loghostsyslogd 程序的信息,请参见《系统管理指南:高级管理》中的“自定义系统消息日志”

邮件诊断信息的其他源

对于其他诊断信息,请检查以下源。