Postfix удалить письмо из ящика

Postfix удалить письмо из ящика

Несомненно, каждый администратор unix подобной операционной системы сталкивался с необходимостью чистить очередь почтовых сообщений. Посмотреть очередь сообщений можно командой:

[root@server ~]# mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
BD65F10DEE4*     4089 Wed Oct   3 00:29:01   sender@domain.ru
                                             resipient@domain.ru
C7D0E10DEE9      4457 Wed Oct   3 00:30:15   sender@domain.ru
(host imx1.rambler.ru[81.19.66.234] said: 452 4.7.1 Try again later (in reply to DATA command))
                                             recipient@rambler.ru

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

Идентификатор сообщения в очереди, если после идентификатора стоит знак “*” – письмо находится в активной очереди на доставку, если знак “!” – письмо находится в очереди ожидания и попыток доставки его производится не будет.
Размер сообщения.
Время принятия письма.
Отправитель сообщения.
В выводе команды может быть указана причина по которой письмо не отправлено и осталось в очереди на доставку.
Получатель сообщения.

Удалить письмо можно командой:

[root@server ~]# postsuper -d идентификатор_сообщения

Таким образом, посмотрев вывод mailq можно найти требуемое письмо по отправителю, получателю или по сообщению о не возможности доставки в данный момент (в примере rambler.ru просит нас отправить письмо позже). Все как бы хорошо, но что делать если в организации периодически производят рассылки и писем сотни или даже тысячи? Достаточно просто сделать выборку по отправителю, т.к. отправитель и нужный нам идентификатор находятся в одной строке.

[root@server ~]# mailq | grep "sender" | awk '{ print $1 }' | sed s/*// | postsuper -d -

А если нужно сделать выборку по получателю или сообщению о не возможности доставки? Какого то готового рецепта я не нашел в интернете, хотя нужно было очень срочно. Итак, нужно все данные по каждому письму объединить в одну строку. Привожу ниже то что получилось у меня:

[root@server ~]# mailq | grep -v "Queue ID" | while read line; do if [ "1" != `echo $line | wc -m` ]; then echo -n " "$line; else echo""; fi ; done | grep "sender or non delivery message" | awk '{ print $1 }' | postsuper -d -

Используя свои данные вместо тех что указаны в примере “sender or non delivery message” можно легко очистить очередь от ненужных писем.

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

Ваш адрес email не будет опубликован.

 

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.