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

Удалить из mailq, где тема совпадает

У меня есть mailq, для которого создается резервная копия нескольких писем с одинаковой темой. Я хотел бы удалить все электронные письма в mailq, которые соответствуют определенной строке темы, чтобы они не отправлялись. Есть идеи, как это сделать? Довольно срочно, поскольку касается спама.

При обычной установке postfix электронное письмо будет в / var / spool / postfix. Есть несколько очередей. Вы хотите остановить postfix, чтобы можно было безопасно использовать postsuper для удаления писем. Этот короткий сценарий удалит все электронные письма, соответствующие определенной строке. В нашем случае нам нужно было найти тысячи писем с одинаковой темой.

В этом случае все электронные письма были отложены, потому что наша служба повторной отправки их отклонила из-за превышения лимита.

cd /var/spool/postfix/deferred
grep -r -i -l "This was the subject line" ./ | cut -d/ -f3 | postsuper -d -

Некоторые ключевые замечания по этому поводу:

  • grep -l возвращал имя файла для совпадений, которое является идентификатором очереди совпадающего сообщения
  • все сообщения находились в разных подкаталогах, поэтому сокращение было таким, чтобы убрать путь с фронта. Убедитесь, что вы протестировали обратный путь, чтобы убедиться, что вы просто получаете имя очереди.
  • postsuper -d - указывает postsuper удалять сообщения, полученные от стандартного ввода.

Надеюсь, это поможет людям, которые найдут это и ищут более конкретные инструкции.

Postfix не имеет такой утилиты, как exigrep, поэтому вам нужно будет найти файлы очереди для объекта, а затем передать идентификатор очереди в postsuper, чтобы удалить их.

Просто альтернативная команда, которая делает то же самое, что и gview:

find /var/spool/postfix/deferred/ -exec grep -l 'Subject: this was the subject line' {} \; | xargs -r -n1 basename | xargs -r -n1 postsuper -d
  • find + grep -l: найти отложенные электронные письма в файловой системе с заданной темой
  • xargs + basename: получить идентификатор сообщения из пути к почтовому файлу
  • xargs + postsuper: используйте полученный идентификатор сообщения для подачи postsuper -d и удаления почты из очереди

В настоящее время postqueue может выводить структурированный json-файл с помощью -j.

Вы можете извлечь необходимую информацию с помощью простого grep или парсера json на вашем любимом языке.

например, извлечь идентификатор очереди и электронную почту с помощью sed:

postqueue -j | sed -rn 's/.*"queue_id": "([^"]*)".*"address": "([^"]*)".*/\1\t\2/gp'

вы можете продолжить так:

| egrep "spammer.com|@otherspammer.org|rejectme@any.*com" | cut -f 1 | postsuper -d -

egrep для фильтрации желаемых адресов, cut для получения первого поля и postsuper -d для удаления всех идентификаторов очереди, полученных из канала. Вы можете создать псевдоним для облегченного решения или, конечно, использовать python / perl / что угодно для создания вашего сложного решения.

Ты можешь использовать:

postqueue -p | grep 'user@example.com' | cut -d ' ' -f1 | tr -d '*' | postsuper -d -