我有一个 mailq,上面备份了多封具有相同主题行的电子邮件。我想删除 mailq 中与特定主题行匹配的所有电子邮件,这样它们就不会被发送。有什么想法可以做到这一点吗?非常紧急,因为它与垃圾邮件有关。
答案1
Postfix 没有像 exigrep 这样的实用程序,因此您需要 grep 主题的队列文件,然后将队列 ID 传递给 postsuper 以删除它们
答案2
在典型的 Postfix 安装中,电子邮件将位于 /var/spool/postfix 中。有多个队列。您需要停止 Postfix,以便可以安全地使用 postsuper 删除电子邮件。这个简短的脚本将删除所有与特定字符串匹配的电子邮件。在我们的案例中,我们需要找到数千封具有相同主题行的电子邮件。
在这种情况下,所有电子邮件都被推迟了,因为我们的转发服务因超出限制而拒绝了它们。
cd /var/spool/postfix/deferred
grep -r -i -l "This was the subject line" ./ | cut -d/ -f3 | postsuper -d -
关于这一点的一些关键说明:
- grep -l 返回匹配的文件名,即匹配消息的队列 ID
- 这些消息都在不同的子目录中,因此切入点是将路径从前面剥离。确保测试返回路径以确保您只获取队列名称
- postsuper -d - 告诉 postsuper 删除从标准输入获得的消息。
希望这能帮助那些发现此问题并正在寻找更具体说明的人。
答案3
这只是 gview 提出的执行相同操作的替代命令:
find /var/spool/postfix/deferred/ -exec grep -l 'Subject: this was the subject line' {} \; | xargs -r -n1 basename | xargs -r -n1 postsuper -d
- find + grep -l:在文件系统中查找具有给定主题的延期电子邮件
- xargs + basename:从邮件文件的路径中检索消息 ID
- xargs + postsuper:使用检索到的消息 ID 来输入 postsuper -d 并从队列中删除邮件
答案4
您可以使用:
postqueue -p | grep '[email protected]' | cut -d ' ' -f1 | tr -d '*' | postsuper -d -