У меня есть 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 -
Некоторые ключевые замечания по этому поводу:
Надеюсь, это поможет людям, которые найдут это и ищут более конкретные инструкции.
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
В настоящее время 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 -