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 -
これで一括削除ができる。
最近のコメント