[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" можно легко очистить очередь от ненужных писем.
добрый день.
ОтветитьУдалитьПодскажите, вы не могли бы, разъяснить смысл команд:
"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 -"
Спасибо.