Удалить/Очистить/Сбросить очередь в postfix
Иногда, приходиться удалять письма из очереди, и если не знаете как это сделать ( или может забыли), то данная тема поможет с этим разобраться.
Для начала, проверим что иметься в очереди:
$ postqueue -p
У меня например, образовалось вот такая очередь:
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient------- CA0664A220C9 438 Wed Apr 5 19:34:35 root@linux-notes.org (connect to example.org[2606:2800:220:1:248:1893:25c8:1946]:25: Connection timed out) user@example.org CC3B64A220C4 430 Wed Apr 5 19:30:46 root@linux-notes.org (connect to example.org[93.184.216.34]:25: Connection timed out) user@example.org 7BCF14A22CCE 3231 Fri Apr 7 14:21:23 MAILER-DAEMON (connect to captain-notes[/var/lib/imap/socket/lmtp]: No such file or directory) www@linux-notes.org -- 4 Kbytes in 3 Requests.
Или, имеется другая утилита:
$ mailq
Чтобы сохранить результат в текстовый файл, можно запустить:
$ postqueue -p > mailq_output.txt
или
$ mailq >mailq_output.txt
Просмотр сообщения (Содержимое, заголовок и тело)
Предположим, что сообщение имеет идентификатор XXXXXXX (я выше показывал как )
$ postcat -vq XXXXXXXXXX
Или, сохраняем в файл:
$ postcat -vq XXXXXXXXXX > msg_output.txt
Удалить/Очистить/Сбросить очередь в postfix
Если есть необходимость удалить конкретное письмо ( нужно знать его ID), выполните команду:
# postsuper -d mail_queue_id
Чтобы очистить очередь в Postfix MTA просто введите следующую команду:
# postfix flush
Или:
# postfix -f
Чтобы удалить всю почту из очереди, введите:
# postsuper -d ALL
Чтобы удалить все письма в отложенной очереди (deferred), введите:
# postsuper -d ALL deferred
Чтобы удалить все письма из почтовой очереди, которые пришли с test_user@linux-notes.org или отправлены на адрес test_user@linux-notes.org (команда одинакова независимо от того, является ли это адресом отправителя или получателя), вы можете использовать следующую команду:
# mailq | tail -n +2 | awk 'BEGIN { RS = "" } /test_user@linux-notes\.org$/ { print $1 }' | tr -d '*!' | postsuper -d -
Или
# mailq | tail -n +2 | grep -v '^ *(' | \ gawk 'BEGIN {RS = ""} /test_user@linux-notes.org/ {print $1}' | \ tr -d '*!' | sudo postsuper -d -
Ничего сложного в этом нет.
Нашел в интернете, готовый скрипт, который удаляет всю почту из mailq, которая соответствует регулярному выражению (указанному в качестве первого аргумента).
$ vim drop_email_queue.pl
И прописываем в него:
#!/usr/bin/perl $REGEXP = shift || die "no email-adress given (regexp-style, e.g. bl.*\@yahoo.com)!"; @data = qx</usr/sbin/postqueue -p>; for (@data) { if (/^(\w+)(\*|\!)?\s/) { $queue_id = $1; } if($queue_id) { if (/$REGEXP/i) { $Q{$queue_id} = 1; $queue_id = ""; } } } #open(POSTSUPER,"|cat") || die "couldn't open postsuper" ; open(POSTSUPER,"|postsuper -d -") || die "couldn't open postsuper" ; foreach (keys %Q) { print POSTSUPER "$_\n"; }; close(POSTSUPER);
Например, удалите все поставленные в очередь сообщения (исходящие и входящие) для http://linux-notes.org:
# ./drop_email_queue.pl linux-notes.org
Удалите все сообщения в очереди, содержащие слово «world»:
# ./drop_email_queue.pl world
У меня, по данной статье «Удалить/Очистить/Сбросить очередь в postfix» все.
Скрипт НЕ работает ((
А что не работает? Ошибку какую выдает?