複数のドメインを持つサーバーがあります。特定のドメインのすべてのPostfixキューメッセージをクリアするにはどうすればよいですか?
このコマンドは、@example.com
で終わる受信者アドレスに送信されたすべてのメールを削除します
Sudo mailq | tail -n +2 | awk 'BEGIN { RS = "" } /@example\.com$/ { print $1 }' | tr -d '*!' | Sudo postsuper -d -
私は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 -
Grepソリューション
mailq | grep example.com -B1 | grep -oE "^[A-Z0-9]{10,11}" | Sudo postsuper -d -
iDが10桁から11桁であると想定します(iノードに基づく)
キューを管理するための必須ツールである pfdel.pl を見てください。正規表現を使用して、ドメインに対応するキューで待機しているメールを削除します。
特定のドメインの電子メールアドレスとの間でメッセージを削除する場合、次のコマンドが役立ちます。
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
が機能しないためです。)