从 mailq 中删除主题匹配的内容

从 mailq 中删除主题匹配的内容

我有一个 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 -

相关内容