postfixで特定のメールアドレスに対するキューを一括削除するコマンド

こんにちは。案浦です。

またやってしまいました、自分宛に誤爆を。

メールの大量送信です。

今から軽く10年以上前になるのですが当時のガラケーのメアドに1万通ほど誤送信(もちろん、自分のメアド)して、一時的に「この電話はお客様のご都合によりご利用できません。」というアカウント(携帯契約)自体を凍結された事が(汗)。
※その時は丸一晩この状態で、自然と凍結解除されました。

今回はそれとは違うのですが、結局似たような感じでたぶんゆうに数千通レベルw。

厳密には誤爆ではなく思ったよりもメールのループが多かったというか、なんというか。

プログラム自体は用がすんだ時点で停止(処理自体を削除)したのですが、実はpostfixのキューに大量に残ってまして、これが何時間も延々と届き続けるという自体に発展してしまいました。

経験者はみんな知っていますが、結局プログラム止めてもメールキューに大量にすでに貯められてしまっている場合には、それだけでは止まりませんw。

更に相手から拒否されたりしはじめると、returnも含めてなんだかキューが倍々に膨れ上がってきます。

そういう場合には、キューを消すという作業が必要になります。

今回は、結果的に次ようなコマンドを使ってキューを一括削除してスッキリになりました。
※今回はpostfixでした。過去はsendmailだったかな?

似たような事に遭遇された方はこれで一括で消せます。

メールキューチェックしてキューIDで消す方法では到底終わらない場合に使えます。

mailq | tail -n '+2'  | grep -v '^ *(' | awk 'BEGIN { RS = "" } { if ( $7 == "差し出し人" && $8 == "宛先" && $9 == "") print $1 }'| tr -d '*!' | postsuper -d -

差出人はシステムから出ている場合、サーバーネームがアカウントに入っていることもあるので、一回メールキューをチェックしてみて状況を把握することをおすすめします。

ちなみにこのコマンドで一気に貯まっているキューの確認はできます。
mailq
 で、それでもって1つずつ消す場合には次のコマンドです。
postsuper -d [キューID]
一括で無差別に全キューを消す方法もあるのですが、私は使わないので省略。

全部消えたら結構困る事の方が多いので、上記のように差出人や宛先を指定して消す方が安全ですね。