一般当用户发送一封邮件的时候,Sendmail将立刻发送这一封电子邮件。但是如果当前网络忙使得无法立刻投递信件时,或者是目标地址的连接速度太慢,无法在短时间内投递到目标地址处时,Sendmail将把待发送的邮件排入队列,并在合适的时候重新发送。
队列文件通常存放在/var/spool/mqueue下面,每个待发送的邮件由几个文件构成,例如,用户可以看到下面的目录文件列表:
[root@mail mqueue]# ls
dfRAA27175 xfAAA00733 xfBAA00819 xfEAA32763 xfXAA00706
qfRAA27175 xfAAA00784 xfDAA01360 xfFAA01616
文件名字总是由一个两字符的前缀加上一个随机数字。前缀有4种:
(1)df:邮件内容。
(2)qf:邮件头和一些控制信息。
(3)xf:一些临时文件。
(4)tf:qf文件的临时存储文件。
可以通过看队列中的qf文件来确定当前队列信息,不过通常都可以用mailq程序来完成对队列状态的查询:
[root@localhost mqueue]# mailq
Mail Queue (1 request)
--Q-ID-- --Size-- -----Q-Time----- ------------Sender/Recipient----------- -
RAA27175 22429 Fri Feb 25 17:34
: deferred)
bengok@163.com
这表示队列中目前只有一封信,由fangjc发出,收信人是bengok@163.com。
由Sendmail接受到的信件在用户取走之前将暂时存储在/var/spool/mail目录下面,存储的方法非常简单,就是每个有待读邮件的用户一个文件:
[root@localhost spool]# ls -l /var/spool/mail |more
total 19364
-rw-rw---- 1 anyi mail 7559035 Feb 28 22:04 anyi
-rw-rw---- 1 baixuan mail 514 Nov 7 01:32 baixuan
-rw-rw---- 1 cwc mail 515 Feb 28 08:35 cwc
如果一个用户有多封电子邮件,那么这些邮件就被简单地连接在一起构成一个大文件(所以用户会看到非常巨大的邮件文件)。
要查看邮件系统的状态,使用mailstats命令即可。
如果用户面对的是一个很庞大的邮件服务系统,有时会在某个邮件队列中拥塞太多的消息,用户可能想把这个队列暂停并且在网络空闲的时候再发送,暂停一个邮件队列的办法非常简单,就是将/var/spool/mqueue目录移走:
killall sendmail
mv /var/spool/mqueue /var/spool/mqueue.stop
mkdir /var/spool/mqueue
sendmail –bd
当网络空闲的时候,可以用-oQ参数立即处理拥塞的队列:
sendmail –oQ/var/spool/mqueue.stop –q.