Обрабатываем почтовую очередь в Qmail

Qmail не является последним словом в технологии доставки почты, но этот smtp демон до сих пор очень распространен. В частности многие сервера с Plesk панелью используют именно Qmail.

Для того что бы посмотреть список сообщений ожидающих отправки (посмотреть очередь доставки) можно воспользоваться следующей утилитой:

/var/qmail/bin/qmail-qread

Посчитать количество сообщений в очереди поможет следующий скрипт:

/var/qmail/bin/qmail-qstat

Все немного сложнее с чтением содержания писем. Дело в том, что письмо распределено по трем файлам в следующих папках:

  • /var/qmail/queue/info/
  • /var/qmail/queue/remote/
  • /var/qmail/queue/mess/

Именем файла является id сообщения. ID сообщений выводится в результатах выполнения первой команды. Как правило она возвращает что-то в стиле:

6 Jan 2016 09:18:13 GMT #**10817428** 642 <[email protected]>  
remote [email protected]

ID сообщения выделен жирным.

Прочитать содержимое письма можно с помощью дополнительных телодвижений:

find /var/qmail/queue -name NNNN -exec cat {} \; | less

NNNN - это и есть id сообщения.

Следующий цикл выведет список скриптов которые инициализировали отправку писем в очереди:

for f in $(/var/qmail/bin/qmail-qread |cut -d "#" -f 2 |awk '{print $1}' |sort -u);
do
   find /var/qmail/queue -name $f |xargs grep "X-PHP-Originating-Script";
done |cut -d ":" -f 4 |sort -u