Главная » VPS/VDS и выделенные серверы

Управление очередью сообщений в Postfix.

В данной статье речь пойдет о Postfix. Иногда требуется посмотреть данную очередь, и при необходимости очистить.

Показать содержимое очереди сообщений:

postqueue -p

или

mailq

Вывод количества сообщений в очереди:

postqueue -p| wc -l

Посмотреть параметры сообщения и причины проблем с отправкой для заданного идентификатора сообщения в очереди:

postcat -q 639101083100

Очистить очередь. То есть, по сути удаляем все сообщения из очереди:

postsuper -d ALL

Инициировать внеплановую доставку накопившихся в очереди сообщений для домена test.ru:

postqueue -s test.ru

Отправить все письма:

postqueue -f 

или

mailq -q 

Удалить группу писем от определенного адресата - test@test.ru:

mailq|grep 'test@test.ru'|awk '{print $1}'|xargs -J{} -n1 postsuper -d {} deferred

Очистить из очереди домены по заданной маске:

mailq| ./agr_mailq.pl|grep -E 'MAILER-DAEMON|yahoo|\.de|\.fr|\.it|\.ch'|awk '{print $1}'\ | tr -d '*!'|xargs  -J{} -n1 postsuper -d {} deferred
     
mailq| ./agr_mailq.pl|grep -E 'MAILER-DAEMON|yahoo|\.de|\.fr|\.it|\.ch'|awk '{print $1}'\ | tr -d '*!'|xargs  -J{} -n1 postsuper -d {}

где agr_mailq.pl скрипт следующего содержания:

#!/usr/bin/perl
   my $cur_line="";
   while(<>){
       chomp();
       if (/^[\w\d\*]+\s+\d+/){
           print "$cur_line\n";
           $cur_line=$_;
       } else {
           s/\s+//s;
           $cur_line .= "\t" . $_;
       }
   }

Отфильтровать и удалить из очереди только сообщения на 5 и более адресов одновременно:

mailq |./agr_mailq_big.pl| tr -d '*!'|xargs  -J{} -n1 postsuper -d {}

где agr_mailq_big.pl:

#!/usr/bin/perl
   my $cur_line="";
   my $counter=0;
   while(<>){
       chomp();
       if (/^[\w\d\*]+\s+\d+/){
           if ($counter >= 5){
               print "$cur_line\n";
           }
          $cur_line=$_;
           $counter=0;
       } else {
           s/\s+//s;
           $cur_line .= "\t" . $_;
           $counter++;
       }
   }

Посмотреть список доменов в очереди, и число сообщений для них:

mailq |./agr_mailq.pl |awk '{print $7}'|cut -d'@' -f2|sort|uniq -c|sort -r -n

Записав такие домены в файл, можно вручную отсеять нормальные домены и затем разом удалить мусор из очереди:

Вместе с этим смотрят: