web-dev-qa-db-ja.com

件名が一致するmailqから削除する

同じ件名の複数のメールでバックアップされているmailqがあります。特定の件名行に一致するmailqのすべてのメールを削除して、送信されないようにしたいと思います。これを行う方法はありますか?そのスパム関連としてかなり緊急です。

7
David

Postfixにはexigrepのようなユーティリティがないため、サブジェクトのキューファイルをgrepしてから、キューIDをpostsuperにパイプして削除する必要があります。

2
topdog

通常のPostfixインストールでは、Eメールは/ var/spool/postfixにあります。いくつかのキューがあります。 postsuperを安全に使用して電子メールを削除できるように、postfixを停止する必要があります。この短いスクリプトは、特定の文字列に一致するすべての電子メールを削除します。今回のケースでは、すべて同じ件名のメールを何千通も見つける必要がありました。

この場合、制限を超えたためにメールサービスがメールを拒否したため、メールはすべて延期されました。

cd /var/spool/postfix/deferred
grep -r -i -l "This was the subject line" ./ | cut -d/ -f3 | postsuper -d -

これに関するいくつかのキーノート:

  • grep -lは、一致したメッセージのキューIDである一致のファイル名を返しました
  • メッセージはすべて異なるサブディレクトリにあるため、カットはパスを前面から取り除くことでした。戻りパスをテストして、キュー名を取得していることを確認してください
  • postsuper -d-stdinから受け取ったメッセージを削除するようpostsuperに指示します。

これがこれを見つけて、より具体的な指示を探している人々に役立つことを願っています。

16
gview

Gviewによって提案された同じことを行うための単なる代替コマンド:

find /var/spool/postfix/deferred/ -exec grep -l 'Subject: this was the subject line' {} \; | xargs -r -n1 basename | xargs -r -n1 postsuper -d
  • find + grep -l:指定された件名のファイルシステムで遅延メールを検索します
  • xargs + basename:メールファイルのパスからメッセージIDを取得します
  • xargs + postsuper:取得したメッセージIDを使用してpostsuper -dにフィードし、キューからメールを削除します
1
lgaggini