mailq を実行すると、

-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------

CFC83527CBDA*     851 Thu Oct  3 11:06:56  foo@hogehoge.jp
(delivery temporarily suspended: host smtp.hogehoge.jp[111.222.111.222] refused to talk to me: ・・・・)
recipient1@fugafuga.com
recipient2@foofoo.com
recipient3@barbar.com

のようにキューがリストされる。(上記は一件のみ)

この場合、送信元アドレスはfoo@hogehoge.jpであり、送信先は、recipient1@fugafuga.com、recipient2@foofoo.com、recipient3@barbar.comである。これらの情報を参照し、それを条件としてQueue IDを引っ張ってきて、postsuper –d に渡せばキューを消せる。

そのためのシェルはman postsuperに載っているものを参考にできる。

送信元アドレスを条件にしてキューIDをリストする場合

mailq | tail -n '+2'  | grep -v '^ *(' | awk 'BEGIN { RS = "" } { if ( $7 == "foo@hogehoge.jp" ) print $1 }'

送信先アドレスを条件にしてキューIDをリストする場合

mailq | tail -n '+2'  | grep -v '^ *(' | awk 'BEGIN { RS = "" } { if ( $8 == “recipient1@fugafuga.com” || $9 == “recipient1@fugafuga.com” ) print $1 }'

のようにする。$8以降が送信先アドレスである。

特定のドメインのアドレス、という条件にする場合は正規表現を使う。

mailq | tail -n '+2'  | grep -v '^ *(' | awk 'BEGIN { RS = "" } { if ( $7 ~ "hogehoge.jp" ) print $1 }'

ここで得られるキューIDには*や!がついていたりするので、それを外すため、パイプを追加する。

| tr -d '*!'

そして、これをpostsuper –dに渡す。

| postsuper -d -

完成したシェルは以下の通り。

mailq | tail -n '+2'  | grep -v '^ *(' | awk 'BEGIN { RS = "" } { if ( $7 ~ "hogehoge.jp" ) print $1 }' | tr -d '*!' | postsuper -d -

これで一括削除ができる。