qmailで送信キューが大量にたまってしまったらどうするか。まずは、状況把握。
# /var/qmail/bin/qmail-qstat
これにより、現在のキューの状況がわかる。

messages in queue: 342007
messages in queue but not yet preprocessed: 843

のようにでる。34万件もたまってる。。。

どんなキューかを確認する。

# /var/qmail/bin/qmail-qread

とすると、


15 Jan 2014 04:28:45 GMT #163011079 644 <but@hogehoge.jp> bouncing
remote fugafauga@gmail.com
remote foofoo@yahoo.com
15 Jan 2014 05:27:46 GMT #163386784 568 <zyse@hogehoge.jp>
remote barbar@hotmail.com

のようにでる。
<but@hogehoge.jp>のように<>で囲まれたものが送信元アドレスだ。
#の後の数字がキュー番号。remote のあとにあるのが送信先アドレス。

リモート配信されるキューの情報は、

/var/qmail/queue/remote/*/(キュー番号)
/var/qmail/queue/info/*/(キュー番号)
/var/qmail/queue/mess/*/(キュー番号)
/var/qmail/queue/bounce/*/(キュー番号)

にたまるので、これらを削除していく。
参考: http://d.hatena.ne.jp/japanrock_pg/20090417/1239959873
そのスクリプトが以下の通り。

/bin/qmail-qread | tail -n '+2' \
| grep '#' | grep '@hogehoge.jp>' \
| sed -e 's/^.*#//g' | sed -e 's/ .*$//g' \
| awk 'NF > 0 { system("rm -f queue/remote/*/"$1";rm -f queue/info/*/"$1";rm -f queue/mess/*/"$1";rm -f queue/mess/*/"$1";rm -f queue/bounce/"$1) }'

一行目で、qmail-qreadを使って、先のリストを出力する。
二行目で、キュー番号があり、かつ送信元がhogehoge.jpのドメインのものだけに絞る。
三行目で、#の前を削除し、キュー番号の後の文字列を削除し、キュー番号だけ残す。
(awkで抜き出そうと思ったのだが、なぜかレコードの区切り文字がうまく働かなかった。。。)
四行目で、awkを使って、各キューファイルを削除している。