четверг, 16 августа 2012 г.

Очистка очереди MTA Exim

В очереди, увы, может накапливаться всякая дрянь... Кто-то неправильное мыло в веб-форме указал, где-то спамеры с несуществующего адреса что-то прислали. От этого нужно избавляться, желательно по крону.
Настоятельно рекомендую все пути к бинарникам прописать абсолютными -- для верности. 

Пользователь от которого запускается скрипт должен быть доверенным для Exim'а (в общем случае, просто добавте его в группу mail).

По непонятным причинам экзим иногда теряет тела писем после доставки. В следствие чего, в выводе списка писем (exim -bp) объем тела не указан. exiqgrep такое не понимает и падает с подобной ошибкой:

Line mismatch: 4h 1Kg6sa-0454TM-Tu


Лечится так:


exim -bpr | grep "^[0-9][0-9][0-9]d" | awk `{print $2}' | xargs -n 1 -P 20 exim -Mrm

Рекомендую очень хорошо понять, что делает скрипт перед тем как пихать его в крон. Почта удаляется из очереди навсегда.


   #!/bin/bash

   # Определяем qualify_domain -- он нужен для удаления всякой лажи
   domain=`exim -bP | grep -i "^qualify_domain" | sed -e s/.*\=\ //g`
   # Это очень шаманская строчка
   exim -bpr | grep '<' | awk '{print $2}' | grep '-' | xargs exim -Mrm 2> /dev/null
   # если скрипту передан параметр c, то включается более агрессивный режим
   if [ "$1" == "c" ]; then
      # Удаляем все баунсы старше 10 минут
      exiqgrep -o 600 -if '^<>$' |xargs exim -Mrm
      # Удаляем сообщения с адресами начинающимися с подчерка, минуса или вертикальной черты
      exiqgrep -f '^<\_|^<\-|^<\|' -i | xargs exim -Mrm exiqgrep -r '^\_|^\-|^\|' -i | xargs exim -Mrm
      #Удаляем сообщения отправленные скриптами на китайские домены старше 10 минут
      exiqgrep -f "$domain" -r '.cn$' -o 600 -i | xargs exim -Mrm
      # Удаляем любые сообщения отправленные скриптами, если они не доставлись за 12 часов
      exiqgrep -f "$domain" -o 43200 -i | xargs exim -Mrm
      exit
   fi
   # В мягком режиме удаляем только frozen баунсы и письма с невозможными адресами в заголовках
   exiqgrep -zif '^<>$' |xargs exim -Mrm
   exiqgrep -f '^<\_|^<\-|^<\|' -i | xargs exim -Mrm
   exiqgrep -r '^\_|^\-|^\|' -i | xargs exim -Mrm


P.S. Взято отсюда. В оригинальной статье еще много полезного.

Комментариев нет:

Отправить комментарий