Removendo e-mails da fila do queue

Publicado por Gustavo Pardellas Feijó 25/04/2008

[ Hits: 14.242 ]

Homepage: http://www.gldc.com.br

Download remove_by_email-1.0.sh




Algumas vezes algum script gera um erro e começa a disparar e-mails, o que acaba "entupindo" o diretório queue do seu servidor de e-mails.

Este script foi desenvolvido para remover as mensagens da fila, tomando como base o endereço que se quer remover.

Foi testado com o postfix e o sendmail, bastando alterar a variável referente ao diretório queue do seu servidor.

Comentários e melhorias são bem vindos.

  



Esconder código-fonte

#!/bin/bash
## remove_by_email.sh
## remove emails da fila queue.
## recebe como parametro um endereco
## de e-mail para remover.
## Desenvolvido por Gustavo Feijo
## chmod@gfeijo.eti.br

## Diretorio queue do servidor de e-mail
QUEUE_DIR=/var/spool/postfix

ENDERECO=$2

if [ $UID != 0 ]
then
  echo -e "Desculpe, voce precisa ser root!!"
  exit 1
fi

if [ ! $1 ]
then
  echo -e "Por favor, especifique um endereco para remover:\n Usage: $0 [ --from | --to ] 'usuario@provedor.com.br'\n"
  exit 2
fi

echo -e "Procurando por mensagens a remover..."
case $1 in
    --from)
        QUEUE_FILES=( ${QUEUE_FILES[@]} `/usr/bin/mailq | grep ${ENDERECO} | awk '{print $1}'` )
        ;;
    --to)
        QUEUE_FILES_TO=( ${QUEUE_FILES_TO[@]} `/usr/bin/mailq | grep ^[0-9A-F] | awk '{print $1}'` )
        for i in ${QUEUE_FILES_TO[@]};
        do
          tmp=`/usr/bin/find ${QUEUE_DIR} -type f -name ${i} -exec grep "recipient=${ENDERECO}" {} \;`
          if [ ! -z $tmp ]
          then
           QUEUE_FILES=( ${QUEUE_FILES[@]} `echo ${i}` )
          fi
        done
        ;;
     *)
        echo "Parametro invalido \"$1\""
        echo -e "Usage: $0 [ --from | --to ] 'usuario@provedor.com.br'\n"
        exit 3
        ;;
esac        
QT_MSG=${#QUEUE_FILES[*]}

if [ -z $QUEUE_FILES ]
then
   echo -e "Nenhuma mensagem encontrada.\n"
   exit 1
else
   echo -e "Removendo ${QT_MSG} mensagens.\nPor favor aguarde..."
   faltam=${QT_MSG}
fi

for LOCATOR in ${QUEUE_FILES[@]};
do
  `/usr/bin/find ${QUEUE_DIR} -type f -name ${LOCATOR} -delete`;
  let "faltam = ${faltam} - 1"
  echo -ne "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
  echo -ne "Faltam: "
  printf "%10d" "${faltam}"
done
echo ''
exit 0

Scripts recomendados

Identificar arquivos criados ou removidos no sistema.

Lista de Selecao de arquivos no Dialog

Script para apagar CD-RW com barra de progresso em Xdialog

Xqemu! Uma interface gráfica simples para o qemu.

arredonda - arredondando valores decimais quebrados


  

Comentários
[1] Comentário enviado por xleonardox em 25/04/2008 - 08:21h

Excelente solução! Eu mesmo já perdi as contas das vezes em que, administrando MTAs, tive de ir ao google "repesquisar" soluções simplificadas pra fazer a mesma coisa... tá bem elegante e funcional! Parabéns!

[2] Comentário enviado por ark3ro em 25/04/2008 - 10:40h

Eu tenho um problema MUITO chato ocorrendo aqui na empresa... O meu gerente de TI costuma enviar emails via Outlook utilizando a opção de solicitar confirmação de recebimento.

Pois bem, já ocorreu em 2 casos que eu estava fazendo manutenção no Postfix, e ele deixar as mensagens na Caixa de Saída do Outlook. Daí alguns destinatários recebiam cerca de 100 e-mails por dia até eu solucionar o caso.

Esse script me ajudará nisso? Por exemplo, fazer com que os destinatários deixem de receber a mesma mensagem 100x por dia do Gerente de TI?

[]'s.

[3] Comentário enviado por chmod000 em 25/04/2008 - 12:19h

ark3ro,

é possível que te ajude sim. Mas talvez seja necessário algum tipo de alteração no código. Fique a vontade para isso, mas, por favor, me envie as alterações, pois podem ser interessantes para todos.

A finalidade do script é apenas limpar o queue. Você pode usar ele no cron (não aconselho, pois pode haver perda de mensagens) passando o parâmetro --from email@gerente.de.ti. Desta forma ele vai limpar remover do queue os e-mails do gerente de TI.

[]'s

[4] Comentário enviado por ark3ro em 26/04/2008 - 07:11h

Entendi, chmod... Muito obrigado, e quaisquer alterações que eu fizer no script com certeza estarei notificando aqui.

[5] Comentário enviado por chmod000 em 29/04/2008 - 16:45h

Pessoal, tem uma nova versão disponível para download no link abaixo:

http://www.gfeijo.eti.br/scripts/index.html


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts