18.11. 技巧与提示

有很多方法可以提高 sendmail 站点的管理效率。sendmail 软件包中提供了一些管理工具;让我们来看看其中最重要的几个。

18.11.1. 管理邮件假脱机

邮件在以下目录中排队/var/spool/mqueue目录中,等待传输。此目录称为邮件假脱机。sendmail 程序提供了一种显示所有假脱机邮件消息及其状态的格式化列表的方法。

/usr/bin/mailq 命令是 sendmail 可执行文件的符号链接,其行为与
# sendmail -bp
输出显示消息 ID、其大小、放入队列的时间、发送者以及指示其当前状态的消息。以下示例显示了一个卡在队列中并存在问题的邮件消息
$ mailq
                Mail Queue (1 request)
--Q-ID-- --Size-- -----Q-Time----- ------------Sender/Recipient------------
RAA00275      124 Wed Dec  9 17:47 root
                 (host map: lookup (tao.linux.org.au): deferred)
                                   terry@tao.linux.org.au
此消息仍然在邮件队列中,因为无法解析目标主机 IP 地址。

我们可以通过发出以下命令强制 sendmail 立即处理队列/usr/bin/runq命令。

runq 命令不产生任何输出。sendmail 将开始在后台处理邮件队列。

18.11.2. 强制远程主机处理其邮件队列

如果您使用具有 固定 IP 地址的临时拨号 Internet 连接,并在断开连接时依赖 MX 主机来收集您的邮件,您会发现强制 MX 主机在建立连接后尽快处理其邮件队列非常有用。

sendmail 发行版中包含一个小的 perl 程序,这使得支持它的邮件主机可以轻松实现此操作。etrn 脚本对远程主机的作用与 runq 命令对我们自己的主机的作用大致相同。如果我们像本例所示那样调用该命令
# etrn vstout.vbrew.com
我们将强制主机 vstout.vbrew.com 处理为本地计算机排队的所有邮件。

通常,您会将此命令添加到您的 PPPip-up脚本中,以便在建立网络连接后立即执行它。

18.11.3. 分析邮件统计信息

sendmail 收集有关邮件流量和已向其传递邮件的主机的一些信息。有两个命令可用于显示此信息:mailstatshoststat

18.11.3.1. mailstats

mailstats 命令显示有关 sendmail 处理的邮件量的统计信息。首先打印数据收集开始的时间,然后是一个表格,其中每行代表一个配置的邮件程序,最后一行显示所有邮件的汇总总计。每行显示八项信息

字段含义
M邮件程序(传输协议)编号
msgsfr从邮件程序接收的消息数
bytes_from来自邮件程序的邮件 Kbytes
msgsto发送到邮件程序的消息数
bytes_to发送到邮件程序的邮件 Kbytes
msgsreg拒绝的消息数
msgsdis丢弃的消息数
邮件程序邮件程序的名称

mailstats 命令的输出示例显示在 示例 18-5 中。

示例 18-5。mailstats 命令的示例输出

# /usr/sbin/mailstats
Statistics from Sun Dec 20 22:47:02 1998
 M   msgsfr  bytes_from   msgsto    bytes_to  msgsrej msgsdis  Mailer
 0        0          0K       19        515K        0       0  prog
 3       33        545K        0          0K        0       0  local
 5       88        972K      139       1018K        0       0  esmtp
=============================================================
 T      121       1517K      158       1533K        0       0

如果在sendmail.cf文件中启用了 StatusFile 选项并且状态文件存在,则会收集此数据。通常,您会将以下内容添加到您的sendmail.cf文件
# status file
O StatusFile=/var/log/sendmail.st

要重新启动统计信息收集,您需要将统计信息文件长度设置为零
> /var/log/sendmail.st
并重新启动 sendmail

18.11.3.2. hoststat

hoststat 命令显示有关 sendmail 尝试向其传递邮件的主机的状态信息。hoststat 命令等效于将 sendmail 作为以下命令调用
sendmail -bh

输出在单独的一行中显示每个主机,并为每个主机显示自尝试传递邮件以来的时间以及当时收到的状态消息。

示例 18-6 显示了您可以从 hoststat 命令获得的输出类型。请注意,大多数结果表明交付成功。另一方面,earthlink.net 的结果表明交付不成功。状态消息有时可以帮助确定失败的原因。在这种情况下,连接超时,可能是因为主机在尝试交付时已关闭或无法访问。

示例 18-6。hoststat 命令的示例输出

# hoststat
 -------------- Hostname ---------- How long ago ---------Results---------
 mail.telstra.com.au                    04:05:41 250 Message accepted for
 scooter.eye-net.com.au              81+08:32:42 250 OK id=0zTGai-0008S9-0
 yarrina.connect.com.a               53+10:46:03 250 LAA09163 Message acce
 happy.optus.com.au                  55+03:34:40 250 Mail accepted
 mail.zip.com.au                        04:05:33 250 RAA23904 Message acce
 kwanon.research.canon.com.au        44+04:39:10 250 ok 911542267 qp 21186
 linux.org.au                        83+10:04:11 250 IAA31139 Message acce
 albert.aapra.org.au                    00:00:12 250 VAA21968 Message acce
 field.medicine.adelaide.edu.au      53+10:46:03 250 ok 910742814 qp 721
 copper.fuller.net                   65+12:38:00 250 OAA14470 Message acce
 amsat.org                            5+06:49:21 250 UAA07526 Message acce
 mail.acm.org                        53+10:46:17 250 TAA25012 Message acce
 extmail.bigpond.com                 11+04:06:20 250 ok
 earthlink.net                       45+05:41:09 Deferred: Connection time 

purgestat 命令刷新收集的主机数据,等效于将 sendmail 作为以下命令调用
# sendmail -bH

统计信息将持续增长,直到您清除它们。您可能需要定期运行 purgestat 命令,以便更轻松地搜索和查找最近的条目,尤其是在您拥有繁忙的站点时。您可以将该命令放入crontab文件中,使其自动运行,或者只是偶尔自己执行。