Qmail有其令人称道的优点,但是不可否认的是,由于Qmail没有控制接收邮件,于是很容易造成队列的拥堵。如何清除Qmail列队中的邮件呢?本文主要通过命令的方式解释了删除列队的几个问题。
[root@mail ~]# mailq 查看队列邮件
postsuper -d ALL 这样就删除所有邮件啦
[注意:大小写有区别,请注意大小写!]
网上看到,Postfix 邮件队列管理的几个 Perl 小程序,pfdel.pl 是用来删除队列中指定用户的邮件的,luserdel.pl 是用来删除队列中无效用户的邮件的,moqdel.pl 是用来删除队列中邮箱配额已满的用户的邮件的,jmoqdel.pl 是删除邮箱配额已满的用户的垃圾邮件箱的。我装的是EMOS1.3,找不到这几个小程序。
用外面的邮件服务器发点EDM,一直有问题,成功太少,干脆用自己的邮件服务器发送,谁知道3W多封邮件是发出去了,全部堵在我们自己的服务器上,邮件服务器给堵死了
只好删除队列中的垃圾邮件了,网上说是 mailq | tail +2 | awk ‘BEGIN { RS = “” } / chen@example\.org$/ { print $1 }’ | tr -d ‘*!’ | postsuper -d
参考官网写个脚本也不行,应该多研究下还可以的,脚本如下:
Q: 删除邮件队列
A: mailq | tail +2 | awk ‘BEGIN { RS = “” } / chen@example\.org$/ { print $1 }’ | tr -d ‘*!’
| postsuper -d -
[root@linuxas3 root]# vi mailqueue
#!/bin/bash
# netkiller@9812.net
queue=$1
# echo ${queue}
DELETE=”mailq | tail +2 | awk ’BEGIN { RS = \”\” } /${queue}$/ { print \$1 }’ | tr -d ‘*!’
| postsuper -d -”
echo ${DELETE} > queue
chmod 755 queue
./queue
[root@linuxas3 root]# chmod 755 mailqueue
[root@linuxas3 root]# ./mailqueue chen@example\\.org
mailq | tail +2 | awk ‘BEGIN { RS = “” } /chen@example\.org$/ { print $1 }’ | tr -d ‘*!’ |
由于邮件中有一些正常邮件,所以只能删除特定字符的垃圾邮件,通过mailq显示出来邮件队列:2AB97F815E* 2749 Thu Feb 5 15:48:38 web1@shequsz.com
szmaxoni@public.szptt.net.cn 删除邮件只需要命令postsuper -d 2AB97F815E即可。应该通过管道可以简单实现,但是我对使用管道不熟悉,只好多走两步了……
[root@mail ~]# mailq |grep shequsz\.com >>/home/maillist 到出包含shequsz.com的垃圾邮件到maillist
[root@mail home]# awk ‘{print $1}’ maillist >>/home/mywang/dellist 把邮件ID导出来,查看下如果带*,需要编辑替换下
[root@mail mywang]# cat delmail.sh 编辑一个脚本,把文件里面ID逐个匹配然后删除邮件
for i in `cat dellist`;
do postsuper -d $i;
done
[root@mail mywang]# sh delmail.sh
postfix有四种不同的邮件队列,并且由队列管理进程统一进行管理:
1. maildrop:本地邮件放置在maildrop中,同时也被拷贝到incoming中。
2. incoming:放置正在到达或队列管理进程尚未发现的邮件。
3. active:放置队列管理进程已经打开了并正准备投递的邮件,该队列有长度的限制。
4. deferred:放置不能被投递的邮件。
postfix日常维护
启动postfix postfix start
停止postfix postfix stop
重新读取postfix配置文件 postfix reload
立即投递队列中所有邮件(慎用) postfix flush
查看队列邮件 postqueue -p 或 mailqpostqueue -p |tail
使用postsuper 来维护队列。一般是先用mailq查看队列里的邮件,找到对应的id,然后用postsuper -d来删除。例如id是0EAF3A9B 那么postsuper -d 0EAF3A9B
Q: 删除邮件队列
A: mailq | tail +2 | awk ‘BEGIN { RS = “” } / chen@example\.org$/ { print $1 }’ | tr -d ‘*!’ | postsuper -d
详细要看mailq和postsuper的用法
修复队列以及任何权限错误
postfix check
查看邮件系统日志
tail -f /var/log/maillog
【编辑推荐】