由于脚本错误,我正在运行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}
)。