从符合主题的sendmail队列中删除消息

由于脚本错误,我正在运行centos并在邮件队列中包含大量电子邮件。 有什么方法可以删除sendmail的邮件队列中的某个主题行的邮件。

这对我来说刚刚起作用,在testing中(这就是为什么它在代码中embedded了如此奇怪的主题)。 它依赖于在sendmail队列中构成消息的两个文件共享除第一个字符以外的相同文件名。

cd /var/spool/mqueue for file in `grep "Subject:.*litigate gasworks" *|cut -f 1 -d:|cut -c2-`; do echo *${file} ; done 

一旦你对它产生的文件列表感到满意,把echo改为rm 。 不要忘记停止发送邮件,然后再把这个队列弄乱。 如果队列发生变化,它可能会变得糟糕。

在sendmail contrib/目录中有一个perl脚本qtool.pl ,让你可以在sendmail运行的时候安全地对假脱机目录进行干预。 您可以按年龄,大小,发件人,收件人和主题(包括其他内容)删除,反弹,移动和过滤。

令人费解的是,它并没有包含在主要的CentOS sendmail包中,你可以在sendmail-doc rpm中find它(感谢kubanczyk注意到这一点),或者你可以从源代码发行版中提取它( ftp://ftp.sendmail .org / pub / sendmail / sendmail-current.tar.gz )。 它具有最小的依赖关系,它们都应该是普通perl安装的一部分。

要删除消息,请使用-d

 qtool.pl -d -e '($msg{headers}->{Subject} =~ /whatever you need/i)' /var/spool/mqueue 

将它们移动到离线mqueue目录(更安全):

 mkdir /var/spool/mqueue-junk qtool.pl -e '($msg{headers}->{Subject} =~ /whatever you need/i)' \ /var/spool/mqueue-junk /var/spool/mqueue 

注意它是“ qtool.pl destination/ source/ ”。 locking的文件(那些在mailq输出中带有“*”的队列ID)将不会被移动,您可能需要重试才能捕获这些文件。

您可以稍后使用sendmail -qR [...] -O QueueDirectory=/var/spool/mqueue-junk来运行该队列。

(旧版本的qtool.pl已知不能正确parsing头文件,因此您需要省略大多数头文件的第一个字母,例如$msg{headers}->{ubject}而不是{Subject} )。