如何从邮件队列中删除来自某个地址的所有邮件?

TRi*_*RiG 3 email postfix

我们在邮件队列中有很多来自某个地址的邮件。我想删除很多。我找到了按主题行删除的方法,但我想按发件人地址进行搜索,这似乎要复杂得多。(注意:这些主要是外发消息。)

一些谷歌搜索在HowToForge上找到了这个命令,但没有解释它的作用。

postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } / spammer@example\.net/ { print $1 }' | tr -d '*!' | postsuper -d - 
Run Code Online (Sandbox Code Playgroud)

我试图使用mailqueuemng,但并没有走多远(一方面,它没有--help)。

Dan*_*tts 6

可以逐步分析管道以查看它的作用。尝试按顺序运行每个命令,直到您完全理解它们:

postqueue -p
Run Code Online (Sandbox Code Playgroud)

打印队列

postqueue -p | tail -n +2 
Run Code Online (Sandbox Code Playgroud)

摆脱前几行

postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } / spammer@example\.net/ { print $1 }' 
Run Code Online (Sandbox Code Playgroud)

使用 spammer@example.net 搜索任何行;打印这些行的第一个字段。

postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } / spammer@example\.net/ { print $1 }' | tr -d '*!'
Run Code Online (Sandbox Code Playgroud)

摆脱任何 *!

这将输出一堆队列 ID。

postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } / spammer@example\.net/ { print $1 }' | tr -d '*!' | postsuper -d -
Run Code Online (Sandbox Code Playgroud)

最后一个命令告诉 postfix 删除这些队列 ID。

阅读上的好人页面postqueuetailtr,和postsuper。awk 是一种更复杂的语言,它是它自己的小语言。你需要的不仅仅是一个手册页来理解它的复杂性,尽管根据我的经验,99% 的 awk 用法很像那个特定的单行。