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


6

У меня есть сервер с несколькими доменами. Как очистить все сообщения очереди Postfix для определенного домена?

Ответы:


11

Эта команда удаляет все письма, отправленные на адрес получателя, который заканчивается @example.com

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

2
В Linux используйте tail -n +2вместо tail +2.
Брайан Минтон

Также tr -dможет быть преобразован в скрипт Awk. Заменить { print $1 }на{ r = $1; gsub(/[!*]/, "", r); print r }
tripleee

7

Я пробовал это решение в 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 -

да, вы должны устранить пробел перед "@".
Алекс

2

Grep решение

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

предполагается, что ID от 10 до 11 цифр (в зависимости от inode)


1

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


0

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

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больше не работают, по крайней мере, в некоторых современных системах.)


Пространство раньше @example\.comкажется неправильным.
tripleee

1
Обратные слеши в конце строки на самом деле не нужны; оболочка понимает, что команда продолжается на следующей строке, если последний токен |(или ||или &&или несколько других).
tripleee

-2

Я немного изменил это:

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


2
Тогда, пожалуйста, объясните, почему и что это должно делать.
Свен

Запуск сотен экземпляров postsuperвообще не является улучшением. xargsхорошо, когда вы используете его правильно, но это не одна из тех ситуаций.
tripleee
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.