postfix有四种不同的邮件队列,并且由队列管理进程统一进行管理:
1. maildrop:本地邮件放置在maildrop中,同时也被拷贝到incoming中。
2. incoming:放置正在到达或队列管理进程尚未发现的邮件。
3. active:放置队列管理进程已经打开了并正准备投递的邮件,该队列有长度的限制。
postfix提供了一组命令行工具来检查、控制、管理队列里的邮件,其中以postsuper和postqucuc这两个工具最为重要。你可以对队列中的邮件进行下列操作:显示邮件列表,删除邮件,重新排队,保留邮件,显示邮件内容,清空邮件
显示邮件列表
postqueue -p
邮件列表的显示项目,包括邮件在队列里的标识符、大小、到达时间、寄件人地址、收件人地址。对于等待邮件,还会另外显示等待原因。如果邮件是在活动队列里,其标识符栏会加注一个星号(除非你的服务器很慢或是负荷沉重,否则应该没有机会见到星号)。在保留队列里的邮件的邮件,其标识符栏会加注一个感叹号。等待邮件不加注任何符号。
命令可列出队列里的所有邮件,其效果如果sendmail包的mailq。当安装postfix时,安装脚步会以postfix版的mailq程序(它其实只是postqueue -p的符号链接而已)取代sendmail包原有的同名程序,借此维持与sendmail包的兼容性。
删除邮件
postsuper-d
命令的选项,可移除队列里的邮件。邮件是以它们在队列里的标识符表示。
如果要删除所有邮件,请把标识符换成ALL。请注意,由于删除所有邮件是相当危险的操作,所以ALL关键字必须全以大写字母表示才有效,其目的是希望你三思而后行。
保留邮件
postsuper -h DRA3P1A9
当你想将邮件无限期留在队列系统里,保留队列就成为容纳这些邮件的场所。不管邮件目前已经传到哪一个队列,你都可以将它们移除原来的队列,转移到保留队列。
假设你已经知道要保留的邮件的标识符,使用postsuper工具的-h选项,在这之后,如果观察邮件列表,会发现该邮件的标识符多了一个感叹号。
要将邮件移回原来的队列,继续其未竟之进程,可使用同一个postsuper工具,只要将原来的-h改成-H。
在邮件被移回原来的队列之后,qmgr依照平常的调度原则来决定其下次投递时间。或者,你也可以执行清空(flush)命令,立刻将邮件递送出去。
重新排队
postsuper-r
如果因为配置问题而耽误了任何邮件,在问题解决之后,你可能希望被耽搁的邮件重新走一遍队列处理流程,以便能够成功完成递送。因为配置问题可能使得 postfix在邮件里存储了错误的投递处理信息,或是使用了错误的地址改写法则。重新排队会使得postfix依据里的新配置来修正错误信息。可以重新排队某一特定邮件,或是要求所有邮件全部都重新排队。
显示邮件内容
postcat -q
可以查看一个队列文件的内容,早期版本的postcat并未提供-q选项,而是要求你提供队列文件的完整路径。然而,由于邮件可能在各个队列目录之间游移不定,而且这些队列目录还有自己的子目录,所以管理员很难一眼看出队列文件的完整路径。
清空邮件
postqueue -f
要求postfix立刻投递滞留在队列里的邮件的操作称为清空(flush)。不过,除了你有理由确定邮件一定能成功投递出去,否则,最好还是让qmgr自己决定重新投递的时机。不断的反复要求清空,会严重影响邮件服务器的效率。
使用-s选项可清空寄到特定站点的邮件,而且收件站点必须要有接收快速清空的“资格”才有效。要使得某站点具备此资格,你必须将该站点的主机名称或网域名称列在fast_flush_domains参数中。此参数的默认值只包含relay_domains所列的所有网域,但是你可以视情况增加额外的站点:
fast_flush_domains = $relay_domains example.com
如果你有一个间歇性的邮件交换机,你可以在该交换器上线的时间内,使用postqueue -s清空先前无法送达到该交换器的所有邮件:
postqueue -s example.com