我正在运行 centos,由于脚本错误,邮件队列中的电子邮件数量过多。有没有办法删除 sendmail 邮件队列中具有特定主题行的邮件?
答案1
刚才在测试中,这种方法对我有用(这就是为什么它在代码中嵌入了如此奇怪的主题行)。它依赖于这样一个事实:组成 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;如果它下面的队列发生变化,它可能会变得不稳定。
答案2
在 sendmailcontrib/
目录中有一个 perl 脚本qtool.pl
,它允许您在 sendmail 运行时安全地对假脱机目录进行干预。您可以删除、退回、移动邮件,并按时间、大小、发件人、收件人和主题(以及其他内容)进行过滤。
令人费解的是,它没有包含在主要的 CentOS sendmail 包中,不过你可以在 sendmail-doc rpm 中找到它(感谢 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/
”。锁定的文件(输出中队列 ID 旁边带有“*”的文件mailq
)将不会被移动,您可能需要重试以捕获这些文件。
您可以选择稍后使用 运行该队列sendmail -qR [...] -O QueueDirectory=/var/spool/mqueue-junk
。
(已知旧版本qtool.pl
不能正确解析标题,您需要省略大多数标题的首字母,例如$msg{headers}->{ubject}
而不是{Subject}
)