¿Cómo manejar la QUEUE (Cola) de Postfix?

0
1696

Si se está usando el MTA postfix, se sabe que éste dispone de un comando para ver la queue (cola) del servidor de correo electronico, y éste es mailq.

Tambien se puede obtener el mismo resultado usando el comando postqueue -p.

Sin embargo al ejecutar cualquier de los dos comandos antes mencionados, se muestra que existen mensajes que aun no se han procesado y a lo cual se han generado como mensajes de error;  para poder eliminarlos de la QUEUE (cola) es necesario ejecutar una secuencia de comandos para limpiar dicha QUEUE. Aqui se ilustran algunos ejemplos.

# mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
5D85F826 8843 Thu Aug 24 08:51:29 MAILER-DAEMON
 (connect to ncklefc.ehabar.stream[91.201.85.67]:25: Connection refused)
 BiblicalDietBreakthrough@ehabar.stream

64133823 2729 Thu Aug 24 07:34:14 MAILER-DAEMON
(connect to mail.standstills.club[162.217.206.55]:25: Connection timed out)
Tamara_Paterson@binder.standstills.club

60583827 2742 Thu Aug 24 08:57:41 MAILER-DAEMON
(connect to mail.yyxinyou.bid[103.214.108.62]:25: Connection timed out)
CVS.Customer-Bonus@graph.yyxinyou.bid

63EB7814 8862 Wed Aug 23 16:46:55 MAILER-DAEMON
(connect to n022wz74g.setsparents.stream[192.140.20.244]:25: Connection refused)
FidelityLifeIns@setsparents.stream

Pero tenerlos ahi en la queue es algo molesto, por eso que decido eliminarlos. Para ello utilizo el comando postsuper -d 5D85F826 donde 5D85F826 es el Queue ID del mensaje a borrar:

# postsuper -d 5D85F826
postsuper: 5D85F826: removed
postsuper: Deleted: 1 message
#

Pero que sucede cuando son un gran numero de correos de éste tipo, el poder eliminarlos 1×1 seria muy “pesado”, para ello usaremos una serie de comandos para realizar o hacer el trabajo mucho más facil y/o practico.

Aquí los tres ejemplos, hacen practicamente lo mismo, eliminar los MAILER-DAEMON de la QUEUE del servidor de correo

1) # mailq | awk ' /^[0-9A-F][0-9A-F]*[^*].*MAILER-DAEMON$/ {print $1}' | postsuper -d -
2) # mailq | grep MAILER-DAEMON  |cut -f 1  -d " "| postsuper -d -
3) # for i in `mailq | grep MAILER-DAEMON | cut -f 1 -d " "`; do postsuper -d $i ; done

También se anexa unos comandos útiles para el manejo de la QUEUE.

Borra los correos encolados de un usuario en especifico
# postqueue -p | awk 'BEGIN { RS = "" } { if ($7 == "  micorreo@midominio.com" ) print $1 }' | tr -d '!*' | postsuper -d -
Coloca en espera (hold) los correos de un usuario
# postqueue -p | awk 'BEGIN { RS = "" } { if ($7 == "  micorreo@midominio.com" ) print $1 }' | tr -d '!*' | postsuper -h -
Borra los correos en cola con determinada cadena de texto

 # mailq | grep “textobuscado” | awk ‘{ print($1); }’ |  postsuper  -d –

Elimina todos los correos MAIL-DEAMON (Rebotes)
# mailq | awk ' /^[0-9A-F][0-9A-F]*[^*].*MAILER-DAEMON$/ {print $1}'| postsuper -d -
Cuantifica la cantidad de correos enviados en un lapso de tiempo
# time smtp-source -s 40 -l 10000 -m 1000 -c -f micorreo1@midominio.com \ 
-t micorreo2@midominio.com mail.midominio.com:25

 

Cheatsheet de comandos postfix

# postsuper -d Queue-ID (eliminar el mensaje)
# postsuper -d ALL (eliminar todos los mensajes)
# postsuper -r Queue-ID (Encolar de nuevo el mensaje)
# postsuper -r ALL (Encolar de nuevo todos los mensajes)
# postcat -q Queue-ID (mostrar el contenido del correo con ese ID)

$ postqueue -p (Mostrar la cola de correo por pantalla)
# postqueue -f (Hacer un flush de la cola de correo, intentar enviar todos los correos)

Aqui otros ejemplos

1) Cuantos correos hay en la queue actualmente
# postqueue -p | tail -n 1

2) Extraer la línea del resumen al final (KBytes y Requests)
# postqueue -p | tail -n 1 | cut -d” ” -f5

3) Contar el número de emails que actualmente hay en cola, tal como se aprecia aquí:
# postqueue -p | tail -n 1 | cut -d” ” -f5 15

4) Mismo resultado que el anterior pero de otra manera:
# postqueue -p | tail -n 1 | cut -d” ” -f2,3

5) Que tamaño que ocupan.
# postqueue -p | tail -n 1 | cut -d” ” -f2,3
25 Kbytes

6) Eliminar todos los correos de un usuario con la cuenta de email comprometida
# grep sasl_username=usuario /var/log/mail.log | awk -F ‘ ‘ ‘{print $6}’ | awk -F ‘:’ ‘{print $1}’ | postsuper -d –

 

ó para algun dominio virtual.. (?)
# grep sasl_username=usuario /var/log/mail.log | awk -F ' ' '{print $6}' | awk -F ':' '{print $1}' | postsuper -c `pwd` -d -

PD: Más informacion en sites.google.com
Suerte!!