Созонов Алексей

Веб-разработчик

Почта

02.12.2015

Посмотреть очередь писем:

# mailq

Удалить все письма из очереди:

# postsuper -d ALL

Удалить все письма из отложенной очереди:

# postsuper -d ALL deferred

Удалить все письма, которые совпадают с регулярным выражением:

#!/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);

Пример:

./postfix-delete.pl fackspamdomain.com
или
./postfix-delete.pl xyz

Оригинал


Если вам нужно удалить все письма из списка, КРОМЕ тех, где отправитель - test@mail.ru:

#!/bin/bash
mailq | tail -n +2 | grep -v '^ *(' | awk  'BEGIN { RS = "" }
# $7=sender, $8=recipient1, $9=recipient2
{ if ($7 != "test@mail.ru" )
    print $1 }
' | tr -d '*!' | postsuper -d -

Пример:

./postfix-delete.sh
#Linux‏‎