Как удалить письмо из очереди писем? Или как удалить плохие письма, например, спамовые, из очереди писем?
Все зависит от почтовой программы. Просмотреть список писем (очередь) можно командой
mailq
Postfix
Письма, которые почтовая программа postfix не доставила (зависит от ваших настроек, количества отправляемых писем в час), можно быстро просмотреть так:
lynx -dump /var/spool/postfix/deferred/X/XYYYYYY
Идентификатор письма XYYYYYY можно увидеть в выводе mailq. Соответственно, первая цифра или буква является именем подкаталога в каталоге deferred.
Для перекодировки письма в другую кодировку, к вышеуказанной команде можно добавить через пайп (|):
iconv -f utf-8 -t koi8-r -c # -c - подавляет ошибки
Перезапустить всю очередь (обычно используется при внесении изменений в конфиг, сообщения начнут обрабатываться заново):
postsuper -r ALL
Если в очереди нет полезных писем, можно удалить всю очередь postfix:
postsuper -d ALL
Чтобы удалить конкретное письмо:
postsuper -d ИДЕНТИФИКАТОР_ПИСЬМА
Понятное дело, что, если в очереди сотни или тысячи плохих писем, то на таком удалении далеко не уедешь. Поэтому можно просто найти письма со спамом и удалить:
find /var/spool/postfix/deferred/ -name "*" -exec grep -i "LONASEX" {} \; \ | awk -F / '{print $7}' | awk '{print $1}' | postsuper -d -
Будут найдены и удалены письма, содержащие ключевое слово "LONASEX".
Удалить письма ошибок доставки можно так:
mailq | grep DAEMON | awk '{print $1}' | postsuper -d –
Sendmail
Sendmail складывает неотправленную почту в каталоге /var/spool/mqueue.
Насильно повторно отправить определенное письмо можно так:
sendmail -v -qI$QF –d11
# где $QF – идентификатор письма
df_ID – тело письма
qf_ID – заголовок письма
Удалять письма из очереди можно грепая файлы заголовков или файлы тел сообщений. Просмотрите письмо как вам удобно (cat, less, more, ee, mcedit etc.) и определитесь с ключевыми словами.
Пример скрипта, который ищет письма по заголовкам, удаляет плохие и пытается повторно отправить нормальные письма:
#!/bin/sh # удаляем письма, в заголовке которых встречается # could not send for QF in `ls qf*` do blacklisted=`grep "could not send" $QF` if [ "$blacklisted" = "" ] then # пытаемся отправить повторно хорошее письмо: echo `sendmail -v -qI$QF -d11` # закомментируйте, чтобы просто удалить письма else # удаляем плохое письмо вместе с телом: body=`echo $QF | sed 's/qf/df/'` rm $body rm $QF fi done
Exim
В exim’е, чтобы просмотреть тело письма, нужно выполнить:
exim -Mvb messageID
А для просмотра заголовка:
exim -Mvh messageID
Удалить одно сообщение:
exim -Mrm messageID
Сдаться и отправить отправителю ошибку:
exim -Mg messageID
Очистить всю очередь:
exim -bp | awk '/^ *[0-9]+[mhd]/{print "exim -Mrm " $3}' | sh
Удалить Frozen письма:
exim -bpu | awk '/\*\*\* frozen \*\*\*/ {print$3}' | xargs exim –Mrm
Удалить все письма, содержащие строку "a certain string":
grep -lr 'a certain string' /var/spool/exim/input/ \ | sed -e 's/^.*\/\([a-zA-Z0-9-]*\)-[DH]$/\1/g' \ | xargs exim –Mrm
Все, желаю удачи и поменьше спама 😉