Pular para o conteúdo

Removendo e-mails da fila do queue

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.
Gustavo Pardellas Feijó chmod000
Hits: 14.870 Categoria: Shell Script Subcategoria: Miscelânea
  • Download
  • Nova versão
  • Indicar
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Descrição

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.
Download remove_by_email-1.0.sh Enviar nova versão
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Script para converter um diretório de arquivos em mp3 para ogg.

Script para ripar faixas de CDs e codificar para .ogg

Bookmaker.bash 2.0

InstallDPKG reformulado - instalando pacotes DEB no Slackware

Compilação automática do kernel Linux-libre 3.14.16

#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.

Contribuir com comentário

Entre na sua conta para comentar.