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.

😉

Related Posts

Deixe um comentário