Почтовые баталии

Автор: | 19 ноября 2010

удаляйте спам оптом

Как удалить письмо из очереди писем? Или как удалить плохие письма, например, спамовые, из очереди писем?

Все зависит от почтовой программы. Просмотреть список писем (очередь) можно командой

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

Все, желаю удачи и поменьше спама 😉

Добавить комментарий