邮件队列是存储 sendmail 命令传送的邮件消息数据和控制文件的目录。缺省情况下,邮件队列是 /var/spool/mqueue。
邮件消息可能由于很多原因而排入队列。
例如:
队列内容可以使用 mailq 命令打印(或通过指定 sendmail 命令的 -bp 标志)。
这些命令产生队列标识、消息大小、消息进入队列的日期以及发送方与收件人的列表。
队列中的每条消息都与一定数量的文件相关联。这些文件按以下约定命名:
TypefID
其中 ID 是一个唯一的消息队列标识,而 Type 是以下表示文件类型的字母中的一个:
d | 包含消息正文但无标题信息的数据文件。 |
q | 队列控制文件。该文件包含处理作业所需要的信息。 |
t | 临时文件。该文件是 q 文件重建时的一个映象。它快速重命名为 q 文件。 |
x | 在会话过程中存在并显示该次会话中发生的任何事件的记录文件。 |
例如,如果一条消息的队列标识为 AA00269,当 sendmail 命令尝试传送消息时,在邮件队列目录中创建和删除以下文件:
dfAA00269 | 数据文件 |
qfAA00269 | 控制文件 |
tfAA00269 | 临时文件 |
xfAA00269 | 记录文件 |
q 控制文件包括一系列行,每一行都以一个代码字母开始:
传送到 amy@zeus 的消息的 q 文件类似于:
P217031 T566755281 MDeferred: Connection timed out during user open with zeus Ramy@zeus H?P?return-path: <geo> Hreceived: by george (0.13 (NL support)/0.01) id AA00269; Thu, 17 Dec 87 10:01:21 CST H?D?date: Thu, 17 Dec 87 10:01:21 CST H?F?From: geo Hmessage-id: <8712171601.AA00269@george> HTo: amy@zeus Hsubject: test
其中:
P217031 | 消息的优先级 |
T566755281 | 提交时间(秒) |
MDeferred: Connection timed out during user open with zeus | 状态消息 |
Sgeo | 发送方标识 |
Ramy@zeus | 收件人标识 |
Hlines | 消息的报头信息 |
要设置消息超时和队列处理间隔,必须用特定的时间值格式。时间值的格式是:
-qNumberUnit
其中 Number 是一个整数值,Unit 是单位字母。Unit 可以是以下值中的一个:
s | 秒 |
m | 分 |
h | 小时 |
d | 天 |
w | 周 |
如果没有指定 Unit,sendmail 守护程序使用分(m)作为缺省值。下面三个示例说明时间值的规范:
/usr/sbin/sendmail -q15d
该命令使得 sendmail 守护程序每 15 天处理一次队列。
/usr/sbin/sendmail -q15h
该命令使得 sendmail 守护程序每 15 小时处理一次队列。
/usr/sbin/sendmail -q15
该命令使得 sendmail 守护程序每 15 分钟处理一次队列。
在某些情况下,您可能发现队列由于某种原因阻塞。您可以使用 -q 标志(没有值)强制一个队列运行。您也可以用 -v 标志(详细)来观察发生了什么:
/usr/sbin/sendmail -q -v
使用一个队列修饰符,您也可以将作业限制在具有特定队列标识符、发送方或收件人的范围中。例如,-qRsally 将队列运行限制为收件人地址之一中有字符串 sally 的作业。同样,-qS 字符串会将运行限制为特定的发送方,而 -qI 字符串将它限制为特定的队列标识。
守护程序启动时 -q 标志的值确定 sendmail 守护程序处理邮件队列的时间间隔。
sendmail 守护程序通常由 /etc/rc.tcpip 文件在系统启动时启动。/etc/rc.tcpip 文件包含一个称为队列处理间隔(QPI)的变量,该变量在该文件启动 sendmail 守护程序时用来指定 -q 标志的值。缺省情况下,qpi 的值是 30 分钟。要指定不同的队列处理间隔:
qpi=30m
这些变化会在下一次系统重新启动时生效。如果您想让这些变化立刻生效,请停止并重新启动 sendmail 守护程序,指定新的 -q 标志值。更多相关信息,请参阅停止 sendmail 守护程序和启动 sendmail 守护程序。
当一个主机长期关闭时,路由到(或通过)该主机的很多消息可能存储在邮件队列中。结果 sendmail 命令要花费很长时间对队列排序,这严重降低了系统性能。如果您移动队列到一个临时空间并创建一个新的队列,旧队列可以稍后在该主机恢复服务后运行。要移动队列到一个临时空间并创建一个新的队列,请:
cd /var/spool mv mqueue omqueue
/usr/sbin/sendmail -oQ/var/spool/omqueue -q
-oQ 标志指定一个备用队列目录。 -q 标志指定运行队列中的每一项作业。要获取操作过程的报告,请使用 -v 标志。
rm /var/spool/omqueue/* rmdir /var/spool/omqueue
要启动 sendmail 守护程序,请输入以下命令中的一个:
startsrc -s sendmail -a "-bd -q15"
/usr/lib/sendmail -bd -q15
如果 sendmail 守护程序在输入这些命令中的一个时已经激活,请参阅屏幕上的以下消息:
sendmail 子系统已经激活。不支持多实例。
如果 sendmail 守护程序没有被激活,您将会看到一条消息表示 0sendmail 守护程序已经启动。
要停止 sendmail 守护程序,请运行 stopsrc -s sendmail 命令。
如果 sendmail 守护程序没有随 startsrc 命令启动,请: