如何删除发送到特定域的 Postfix 队列消息

如何删除发送到特定域的 Postfix 队列消息

我有一台包含多个域的服务器。如何清除特定域的所有 Postfix 队列消息?

答案1

更新2021-04-18:

mailq | tail -n +2 | grep -v '^ *(' | awk  'BEGIN { RS = "" } { if ($8 ~ /@example\.com/ && $9 == "") print $1 }' | tr -d '*!' | postsuper -d -

$7=sender, $8=recipient1, =recipient2。您还可以根据需要$9调整其他收件人的规则 ( )。$9

该命令基于以下示例postsuper 手册页这是一个匹配完整收件人邮件地址的示例命令:

mailq | tail -n +2 | grep -v '^ *(' | awk  'BEGIN { RS = "" } { if ($8 == "[email protected]" && $9 == "") print $1 }' | tr -d '*!' | postsuper -d -

旧内容:

此命令将删除所有以 结尾的地址发送或接收的邮件@example.com

sudo mailq | tail -n +2 | awk 'BEGIN { RS = "" } /@example\.com$/ { print $1 }' | tr -d '*!' | sudo postsuper -d - 

答案2

Grep 解决方案

mailq | grep example.com -B1 | grep -oE "^[A-Z0-9]{10,11}" | sudo postsuper -d -

假设 ID 介于 10 到 11 位数字之间(基于 inode)

答案3

我曾在 ubuntu 12.04 中尝试过这个解决方案,但它不起作用:

sudo mailq | tail +2 | awk 'BEGIN { RS = "" } / @example\.com$/ { print $1 }' | tr -d '*!' | sudo postsuper -d -

我需要改成这样:

postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } /@example\.com/ { print $1 }' | tr -d '*!' | postsuper -d -

答案4

我想给出一个“更现代”的答案来解析json的输出postqueue -j。它取决于包jq来过滤输出,并且更易于理解(和调试):

postqueue -j | jq -rc 'select(.recipients[].address | match(".*@example\\.com$"))["queue_id"]' | postsuper -d -

# For an exact Mail match
postqueue -j | jq -rc 'select(.recipients[].address == "[email protected]")["queue_id"]' | postsuper -d -

除了可读性之外,此解决方案的另一个不太相关的论点是它的易于适应性:

# Filter on delay_reason being "Connection timed out"
postqueue -j | jq -rc 'select(.recipients[].delay_reason | match(".*Connection timed out$"))["queue_id"]' | postsuper -d -

# Filter on arrival_time being older than certain age
postqueue -j | jq -rc 'select(.arriveal_time < 1710265065)["queue_id"]' | postsuper -d -

# Filter on the size of messages
postqueue -j | jq -rc 'select(.message_size > 100000)["queue_id"]' | postsuper -d -

这是完整的 json,显示所有可过滤的值:

{
  "queue_name": "deferred",
  "queue_id": "4TwLyJ4Gpyz2xVB",
  "arrival_time": 1710407000,
  "message_size": 15932,
  "forced_expire": false,
  "sender": "MAILER-DAEMON",
  "recipients": [
    {
      "address": "[email protected]",
      "delay_reason": "delivery temporarily suspended: connect to mail.example.com[111.222.333.444]:25: Connection timed out"
    }
  ]
}

相关内容