В очереди, увы, может накапливаться всякая дрянь… Кто-то неправильное мыло в веб-форме указал, где-то спамеры с несуществующего адреса что-то прислали. От этого нужно избавляться, желательно по крону. Нижеприведенный скрипт предназначен для чистки очереди Exim’а на cPanel серверах, но cPanel здесь необязательна.
Настоятельно рекомендую все пути к бинарникам прописать абсолютными — для верности.
Пользователь от которого запускается скрипт должен быть доверенным для Exim’а (в общем случае, просто добавте его в группу mail).
Кроме того, объясню шаманскую строчку.
По непонятным для меня причинам (кто объяснит?!) экзим иногда теряет тела писем после доставки. В следствие чего, в выводе списка писем (exim -bp) объем тела не указан.
exiqgrep такое не понимает и падает с подобной ошибкой:
Line mismatch: 4h 1Kg6sa-0454TM-Tu [email protected]
Поэтому и была написана «шаманская строчка», которая таких «призраков» изгоняет.
Рекомендую очень хорошо понять, что делает скрипт перед тем как пихать его в крон. Почта удаляется из очереди навсегда.
#!/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