14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Postfixのメールキューから指定の配信先メールだけ削除する

Last updated at Posted at 2014-01-10

postsuperコマンドでALL以外でキューを削除するにはキューIDを指定しなければいけません。
postqueueコマンドでキューの内容から指定のアドレスを送信先とするIDの一時ファイルを作成してキュー削除をループさせます。

deletequeue
#!/bin/bash
#
# postfix mail queue delete script
# usage : bash deletequeue hoge@example.com
#
FILENAME="queueids.tmp"

if [ $# -lt 1 ];then
   echo "an argument mail address is required!"
   exit 1
fi

date
postqueue -p

postqueue -p | grep $1 > $FILENAME
sed -i 's/\s.*$//g' $FILENAME
sed -i 's/\*//g' $FILENAME

cat $FILENAME | while read line
do
  echo "Remove ${line}"
  postsuper -d $line
done

これだけなら簡単ですね。
実行の方法は下記の通り

実行例
bash deletequeue hoge@example.com

これでhoge@example.comから来たメールキューだけ削除することができます。
大量に送信され続けてしまっていて即止めるのが困難な場合はブロックが前提ですがdeferにたまってしまったメールの再送もよけておきたいならワンライナーでこれをしばらく実行し続ければとりあえず暫定対処できます。
deferだから重要なメールがないとも限らないのでその方が安全です。難点はタイミングによって一度送信トライされてしまうところですが。

実行例
while true; do bash deletequeue hoge@example.com; sleep 1; done

コマンドを終了したいときはCtrl+Cで終了します。

14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?