Назад | Перейти на главную страницу

Как удалить сообщения из очереди Postfix, отправленные в определенный домен

У меня есть сервер с несколькими доменами. Как я могу очистить все сообщения очереди 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 -

предполагает, что идентификатор составляет от 10 до 11 цифр (на основе inodes)

смотреть на pfdel.pl, обязательный инструмент для управления очередью. Требуется регулярное выражение и удаляет письма, ожидающие в очереди, соответствующей вашему домену.

Если вы хотите удалить сообщения с или на адреса электронной почты в определенном домене, эта команда работает для меня:

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

Также работает для удаления писем с или на конкретный адрес электронной почты. адреса поставляя, например, mail@example\.com$/ вместо того @example\.com$/.

Взято из комментарий на howtoforge.com. См. Там связанные решения и команду в одной строке. (Я использовал продолжение строки bash для удобства чтения).

Очень похожая команда, которая позволяет сделать удаление в зависимости от того, отображается ли адрес как отправитель, получатель и т. Д., Находится в man postsuper, где говорится о -d:

Например, чтобы удалить всю почту только с одним получателем user@example.com:

mailq | \
  tail -n +2 | \
  grep -v '^ *(' | \
  awk 'BEGIN { RS = "" } { if ($8 == "user@example.com" && $9 == "") print $1 }' | \
  tr -d '*!' | \
  postsuper -d -

(Переменные означают: $ 7 = отправитель, $ 8 = получатель1, $ 9 = получатель2. Я изменил цитату, чтобы использовать tail -n +2, поскольку их tail +2 больше не работает, по крайней мере, на некоторых современных системах.)

Немного изменил:

mailq | grep -B1 | grep -oE "^ [A-Z0-9] {12}" | xargs -I% postsuper -d%