EXIM MTA

Работая с Exim, постоянно наталкиваешься на какие то проблемы, когда письмо зависает в очереди, по тем или иным причинам, либо хост не доступен, либо криво настроены повторы и встает задача, что то сделать с зависшими сообщениями. Собственно ниже, о том как бороться с очередями Exim

Способы очистки очереди:
Наиболее прямолинейный и грубый прием, тем не менее позволяющий очистить очередь безусловно, но настоятельно не рекомендую его использовать:
rm -rf /var/spool/exim/input/*

Корректный способ, имеющий так же результатом полную очистку очереди сообщений:
service exim stop;
rm -rf /var/spool/exim/input.bak;
mv /var/spool/exim/input /var/spool/exim/input.bak;
mkdir /var/spool/exim/input;
chown mailnull.mail /var/spool/exim/input;
chmod 750 /var/spool/exim/input;
service exim start;

Официальный способ очистки очереди:
exim -qff

Тоже самое с включенным дебаггом процесса:
exim -qff -d9

Собственно все тоже самое можно проделать скриптом. Как условие- все исполняемые файлы должны быть прописаны полностью, и пользователь стартующий скрипт должен быть доверенным для Exim’а.
Также данный скрипт может помочь в ситуации когда после доставки сообщения Exim куда то девает телосообщения, в результате чего письмо становится гостом и в листинге очереди exim -bp объем не указывается, в результате чего exiqgrep, не понимая о чем речь, выпадает с ошибкой.
Собственно скрипт убивающий сообщения из очереди, но оговорюсь сразу- письма уходят навсегда.

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

# Удаляем все баунсы старше 20 минут
exiqgrep -o 1200 -if ‘^<>$’ |xargs exim -Mrm
# Сносим все сообщения с адресами начинающихся со спец.символов, таких как нижний подчерк, минус или тире
exiqgrep -f ‘^<\_|^<\-|^<\|' -i | xargs exim -Mrm exiqgrep -r '^\_|^\-|^\|' -i | xargs exim -Mrm #Выкашиваем сообщения отправленные на китайские домены, за последние 20 минут exiqgrep -f "$domain" -r '.cn$' -o 1200 -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 ########################################## Работа с очередью Exim. Когда возникает необходимость удалить одно или несколько замороженных сообщений из очереди, мы прибегаем к утилите Exipick: exipick – показывает сообщения в очереди экзима exipick -z – показывает замороженные сообщения exipick -i – показывает ID сообщений exim -Mrm ID – удаляет из очереди сообщение с определенным ID В итоге получаем: exipick -zi | xargs exim -Mrm //очистит все замороженные сообщения из очереди exipick -i | xargs exim -Mrm //очистит все сообщения из очереди exipick -i | xargs exim -Mg // Очистка почтовой очереди в MTA Exim. Сервер пытается немедленно доставить все письма, находящиеся в очереди. Если какое-либо письмо не удалось доставить, оно удаляется из очереди.