objetivo
Aqui vamos ver alguns métodos para controlar as filas de e-mail do MTA Postfix.
filas
As filas que esta MTA usa para o processamento de mensagens são:
incoming active deferred corrupt hold
Quem faz o gerenciamento da fila é o QMGR (http://www.postfix.org/qmgr.8.html)
Agora vamos entender a finalidade de cada fila.
tipos
incoming
Esta é a fila de e-mails que estâo entrando a partir da rede, repassados pelo maildrop.
active
Esta é a fila de e-mails que foram abertos pelo gerenciador da fila para entregas. Essa fila tem um numero limite para entrada de mensagens.
deferred
Esta é a fila de mensagens que não conseguiram ser entregues na primeira tentativa. O gerenciador da fila vai seguir as configurações do main.cf para novas tentativas de entregas. Por padrão ele vai dobrando o tempo de entrega a cada tentativa.
corrupt
Os arquivos das filas que não conseguem ser lidos ou que estão danificados são movidos para esta fila para uma inspeção.
hold
Mensagens que são colocadas em espera pelo administrador vão para esta fila até que alguém especifique que ela deva ser liberdada.
diretorios e arquivos
Elas ficam no diretório /var/spool/postfix/
root@mail-pri:/etc/postfix# ls /var/spool/postfix/ -la total 2156 drwxr-xr-x 19 root root 4096 Dec 13 2006 . drwxr-xr-x 12 root root 4096 May 27 08:58 .. drwx------ 2 postfix root 405504 May 28 08:45 active drwx------ 2 postfix root 4096 May 28 08:45 bounce drwx------ 2 postfix root 4096 Mar 26 2006 corrupt drwx------ 18 postfix root 4096 Apr 3 2006 defer drwx------ 18 postfix root 4096 Apr 3 2006 deferred drwxr-xr-x 2 root root 4096 May 27 10:37 etc drwx------ 2 postfix root 4096 May 27 10:13 flush drwx------ 2 postfix root 4096 Mar 26 2006 hold drwx------ 2 postfix root 1691648 May 28 08:45 incoming drwxr-xr-x 2 root root 4096 May 27 10:37 lib drwx-wx--T 2 postfix postdrop 36864 May 28 08:45 maildrop drwxr-xr-x 2 postfix root 4096 May 20 11:37 pid drwx------ 2 postfix root 4096 May 27 10:37 private drwx--s--- 2 postfix postdrop 4096 May 27 10:37 public drwx------ 2 postfix root 4096 Mar 26 2006 saved drwx------ 2 postfix root 4096 Apr 5 2007 trace drwxr-xr-x 3 root root 4096 Mar 26 2006 usr
veja o conteúdo do diretório deferred
root@mail-pri:/etc/postfix# ls /var/spool/postfix/deferred/ 0 1 2 3 4 5 6 7 8 9 A B C D E F
veja o conteúdo dos sub-diretórios em deferred
root@mail-pri:/etc/postfix# ls -la /var/spool/postfix/deferred/0/ total 216 drwx------ 2 postfix postfix 12288 May 28 08:15 . drwx------ 18 postfix root 4096 Apr 3 2006 .. -rwx------ 1 postfix postfix 7648 May 28 08:48 021CF81FC -rwx------ 1 postfix postfix 119423 May 28 2008 05AE380DC -rwx------ 1 postfix postfix 30256 May 28 2008 05FA581C3 -rwx------ 1 postfix postfix 5002 May 28 2008 097EE80AD -rwx------ 1 postfix postfix 4578 May 28 2008 0CBB081B8 -rwx------ 1 postfix postfix 18921 May 28 08:48 0FB458081
verificando o tipo de arquivo
root@mail-pri:/etc/postfix# file /var/spool/postfix/deferred/0/021CF81FC /var/spool/postfix/deferred/0/021CF81FC: data
controlando a filas
usando postqueue
Vamos aprender a gerenciar a fila com o postqueue (http://www.postfix.org/postqueue.1.html)
postqueue -p
para verificar como está sua fila use o comando
postqueue -p
postqueue -f
para dar um flush na fila e enviar mensagens que estão aguardando (deferred) use o comando
postqueue -f
postqueue -i
para iniciar a entrega imediata de uma mensagem na fila deferred
postqueue -i message_id
postqueue -i F2AF0111029
como obter o message id?
posqueue -p|grep endereco@dominio.com.br
'''F2AF0111029''' 5514 Wed May 28 07:58:02 nome@dominio
postqueue -s
para iniciar a entrega imediata de mensagens na fila para um domínio especifico
postqueue -s mda.gov.br
usando o postsuper
Vamos aprender a gerenciar a fila com o postsuper (http://www.postfix.org/postsuper.1.html)
postsuper -h
Colocando mensagem em HOLD (espera).
postsuper -h queue_id
postsuper -H
Libera mensagem colocada em HOLD
postsuper -H queue_id
postsuper -d
remove mensagem das filas
postsuper -d queue_id
remove todas as mensagens da fila
postsuper -d ALL
postsuper -p
Faz um purge na nos arquivos temporarios da fila que podem ser sobras de um crash no sistema ou no postfix.
postsuper -p
postsuper -s
Verifica a estrutura das filas e repara a fila caso exista algum problema.
postsuper -s
postsuper -r
Recoloca a mensagem na fila, geralmente usamos quando queremos pegar uma mensagem e enviar imediatamente.
postqueue -r queue_id
Se você quiser fazer isto com várias mensagens, coloque-as em um arquivo, uma em baixo da outra e faça o seguinte
cat queueid_list.txt | postqueue -r -
visualizano filas
qshape
O Qshape é uma ferramenta de análise estatística do postfix, vamos aprender a usá-lo.
visualizando fila active
qshape active
qshape active|head
visualizando fila deferred
qshape deferred
qshape deferred|head
visualizando fila incoming
qshape incoming
qshape incoming|head
visualizando fila hold
qshape hold
qshape hold|head
tem vários outras formas de usar o qshape mas a documentação dele é bem clara 😉
exemplo de saída do qshape
# qshape incoming active
T 5 10 20 40 80 160 320 640 1280 1280+ TOTAL 655 60 111 0 43 0 7 6 120 150 158 mopar.ops.gov.br 151 40 111 0 0 0 0 0 0 0 0 ops.gov.br 109 0 0 0 0 0 0 0 0 50 59 correioweb.com.br 55 0 0 0 0 0 0 0 55 0 0 ops.gov.br 35 0 0 0 0 0 0 0 0 14 21 uai.com.br 31 0 0 0 4 0 0 0 27 0 0 serv-ops-2.ops.gov.br 20 20 0 0 0 0 0 0 0 0 0 uol.com.br 19 0 0 0 19 0 0 0 0 0 0 acritica.com.br 14 0 0 0 1 0 0 6 4 0 3 redesat-to.com.br 10 0 0 0 1 0 1 0 4 0 4 alterosa.com.br 7 0 0 0 1 0 0 0 6 0 0 hotamil.com 6 0 0 0 1 0 0 0 2 0 3 ibahia.com 5 0 0 0 0 0 0 0 1 2 2 consultor.ops.gov.br 5 0 0 0 0 0 0 0 0 2 3 inatel.com.br 4 0 0 0 0 0 0 0 2 0 2 estagio.ops.gov.br 4 0 0 0 0 0 0 0 0 1 3 ojc.com.br 3 0 0 0 0 0 0 0 2 0 1 umc.com.br 3 0 0 0 0 0 0 0 0 0 3 oesp.com.br 3 0 0 0 0 0 0 0 1 0 2 tvcaju.com.br 3 0 0 0 0 0 1 0 0 0 2
usando shellscript
bash + find
vamos criar um arquivo chamado contafilas
# vim /etc/postfix/contafilas
coloque o conteúdo abaixo
- contafilas
-
#!/bin/sh # autor: gutocarvalho (guto@gutocarvalho.net) # data de criacao: 2008-05-28 # baseado nos scripts do queuegraph # uso: ./contafilas # variaveis while true;do clear qdir=`/usr/sbin/postconf -h queue_directory` incoming=`/usr/bin/find $qdir/incoming -type f -print | wc -l | awk '{print $1}'` maildrop=`/usr/bin/find $qdir/maildrop -type f -print | wc -l | awk '{print $1}'` active=`/usr/bin/find $qdir/active -type f -print | wc -l | awk '{print $1}'` deferred=`/usr/bin/find $qdir/deferred -type f -print | wc -l | awk '{print $1}'` hold=`/usr/bin/find $qdir/hold -type f -print | wc -l | awk '{print $1}'` corrupt=`/usr/bin/find $qdir/corrupt -type f -print | wc -l | awk '{print $1}'` # imprimindo informacoes echo "Contandor de filas Postfix por Guto Carvalho <gutocarvalho@gmailcom>" echo -e "\nE-mails chegando (incoming queue): $incoming" echo "E-mails sendo processados (maildrop): $maildrop" echo "E-mails na fila para entrega (active queue): $active" echo "E-mails que nao foram entregues (deferred queue): $deferred" echo -e "E-mails com problemas (corrupt queue): $corrupt\n" sleep 1 done
o script original do queuegraph soma incoming + active + maildrop para falar a quantidade de e-mails ativos, deixando apenas a variável active, eu preferi modificar, mas se quiser usar como era originalmente, apague a variável 'incoming
‘ e 'maildrop
‘ e deixe apenas a variável active como abaixo:
active=`/usr/bin/find $qdir/active $qdir/maildrop $qdir/incoming -type f -print | wc -l | awk '{print $1}'`
agora ajuste as permissões
# chmod 700 contafilas
para usar
# ./contafilas
saída do comando
E-mails chegando: '1
‘
E-mails sendo processados: '''0''' E-mails na fila para entrega local: '''2''' E-mails que nao conseguiram ser entregues local/remoto: '''156''' E-mails com problemas: '''0'''
pronto 😉
bash + qshape
Este script vai usar o qshape para contar as filas INCOMING, ACTIVE, DEFFERD e HOLD
vamos criar o arquivos
# vim contafilas-qshape
coloque o conteúdo do arquivos
- contafilas-qshape.sh
-
#!/bin/bash # getmailq.sh - written by Valec 2006. Steal and share. #Get postfix queue lengths #Place in /usr/local/bin/ #exec .1.3.6.1.4.1.2021.53.101.0 mailq /usr/local/bin/getmailq.sh QUEUES="incoming active deferred hold corrupt" for i in $QUEUES; do COUNT=`qshape $i | grep TOTAL | awk '{print $2}'` printf "$i:$COUNT " done
ajustando permissões
chmod 700 contafilas-qshape.sh
rodando o script
# ./contafilas-qshape.sh
saída do comando
incoming:0 active:2 deferred:187 hold:0 corrupt:0
pronto 😉
delivery status reports
Aproveitando o ensejo vamos falar sobre os estados das mesagens, é importante saber que o gerenciador de fila QMGR mantem um arquivo com o mesmo nome da fila em outros diretórios com informações sobre o estado daquela mensagem.
Os estados são:
bounce defer trace
Vamos agora entender o que cada estado significa.
bounce
Informação sobre os motivos da mensagem ter recebido um bounce (mensagem de erro).
Estas informações são gerenciadas pelo BOUNCE DAEMON.
defer
Informação sobre os motivos da mensagem estar com o envio atrasado.
Estas informações são gerenciadas pelo DEFER DAEMON.
trace
Informação sobre requisições com o comando sendmail -v ou sendmail -bv do MTA postfix.
Estas informações são gerenciadas pelo TRACE DAEMON.
😉