Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Podendo
ser um Postfix ou outra Servidor qualquer.
Sabemos que o comando mailq consulta nossa fila, bem como o comando postsuper
gerencia a fila de e-mail, fazendo reenvio, deleção, entre outros. O grande problema do
postsuper é sua limitação, pois podemos deletar a fila toda (superpost –d ALL) ou email
através do ID destes (postsuper –d EAD00151DFE6). Mas não permite que especificassem,
por exemplo, uma origem ou destino.
Bem, neste Post veremos como podemos deletar determinados e-mails com uso de
pipeline de comandos no Shell. Através do uso de alguns comandos com awk, mailq e mais
alguns.
Primeiro devemos ver como funciona o comando de consulta da fila de mensagens que
é o mailq.
Uma junção dos comandos mail, grep, awk irá nos trazer a informação que precisamos.
Esse comando extenso e complexo, irá nos trazer o ID das mensagens de origem de
email@deletar. Tendo esses ID podemos usar o xargs para passar o comando de deleção, ou
passar diretamente para o postsuper.
Mas acredito que seja mais simples, um uso do grep diretamente para filtrar o email,
ao invés do awk.
Com isso filtramos os e-mails que contenham email@deletar tanto na origem como no
destino. Se for crucial trazer somente origem, o primeiro comando é o suficiente.
Após todo esse filtro, podemos usar simples postsuper –d – ao final do comando para
deletarmos os e-mails especificado. O mesmo serve para e-mail com erro MAILER DAEMON.
Para facilitar nossa vida podemos então criar um script, que irá apagar o que
desejarmos.
#!/bin/bash
EMAIL=$1
if [ -z "$EMAIL" ]
then
echo "Usage: $0 <email adres>"
exit
fi
./deletar-email.sh joao@stato.blog.br
Desta forma estaríamos excluindo todos os e-mails que foram enviados por
joao@stato.blog.br.
Parece complicado, mas não é. O find busca por arquivos comuns, o xargs pega os
arquivos achados e passa o grep filtrar pelo e-mail procurado, o sed remove toda linha até
encontrar o ID do e-mail (.*\/ igual qualquer caractere e uma barra) e por fim sobram dois
campos o e-mail e o restante a palavra matches. Então o awk remove a segunda coluna que
por sua vez envia para o postsuper deletar.
find /var/spool/postfix –type f | xargs –n 1000 grep dominio.com.br | sed ‘s/.*\///g’ | awk
‘{ print $2}’ | postsuper –d -
Também é possível usar todo esse conceito com o zimbra, já que o mesmo
normalmente usa o postfix para envio de mensagens.