web-dev-qa-db-ja.com

特定のドメインに送信されたPostfixキューメッセージを削除する方法

複数のドメインを持つサーバーがあります。特定のドメインのすべてのPostfixキューメッセージをクリアするにはどうすればよいですか?

6
Tarek

このコマンドは、@example.comで終わる受信者アドレスに送信されたすべてのメールを削除します

Sudo mailq | tail -n +2 | awk 'BEGIN { RS = "" } /@example\.com$/ { print $1 }' | tr -d '*!' | Sudo postsuper -d - 
12
sebix

私はubuntu 12.04でこの解決策を試しましたが、この方法では機能しません:

Sudo mailq | tail +2 | awk 'BEGIN { RS = "" } / @example\.com$/ { print $1 }' | tr -d '*!' | Sudo postsuper -d -

私はこのように変更する必要があります:

postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } /@example\.com/ { print $1 }' | tr -d '*!' | postsuper -d -
7
Clemente Acosta

Grepソリューション

mailq | grep example.com -B1 | grep -oE "^[A-Z0-9]{10,11}" | Sudo postsuper -d -

iDが10桁から11桁であると想定します(iノードに基づく)

3
Jacob Evans

キューを管理するための必須ツールである pfdel.pl を見てください。正規表現を使用して、ドメインに対応するキューで待機しているメールを削除します。

1
Dom

特定のドメインの電子メールアドレスとの間でメッセージを削除する場合、次のコマンドが役立ちます。

mailq | \
  tail -n +2 | \
  awk 'BEGIN { RS = "" } / @example\.com$/ { print $1 }' | \
  tr -d '*!' | \
  postsuper -d -

また、たとえばmail@example\.com$/ではなく@example\.com$/を指定することにより、特定の電子メールアドレスとの間で電子メールを削除することもできます。

howtoforge.comのコメント から取得。関連するソリューションとコマンドを1行で参照してください。 (読みやすさのためにbash行の継続を使用しました)。

アドレスが送信者、受信者などとして表示されるかどうかに応じて削除できる非常に類似したコマンドがman postsuperにあり、-dについて説明しています。

たとえば、受信者が[email protected]のメールを1つだけ削除するには、次のように入力します。

mailq | \
  tail -n +2 | \
  grep -v '^ *(' | \
  awk 'BEGIN { RS = "" } { if ($8 == "[email protected]" && $9 == "") print $1 }' | \
  tr -d '*!' | \
  postsuper -d -

(変数の意味:$ 7 = sender、$ 8 = recipient1、$ 9 = recipient2。引用符を変更して、tail -n +2を使用するようにしました。これは、少なくとも一部の最新システムでは、tail +2が機能しないためです。)

0
tanius