Удалить/Очистить/Сбросить очередь в postfix

Удалить/Очистить/Сбросить очередь в 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» все.

2 thoughts on “Удалить/Очистить/Сбросить очередь в postfix

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *