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

6

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

Тарек
источник

Ответы:

11

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

sudo mailq | tail -n +2 | awk 'BEGIN { RS = "" } /@example\.com$/ { print $1 }' | tr -d '*!' | sudo postsuper -d - 
sebix
источник
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больше не работают, по крайней мере, в некоторых современных системах.)

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

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

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

user465116
источник
2
Тогда, пожалуйста, объясните, почему и что это должно делать.
Свен
Запуск сотен экземпляров postsuperвообще не является улучшением. xargsхорошо, когда вы используете его правильно, но это не одна из тех ситуаций.
tripleee