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

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

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)
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.

64133823 2729 Thu Aug 24 07:34:14 MAILER-DAEMON
(connect to mail.standstills.club[162.217.206.55]:25: Connection timed out)
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.

60583827 2742 Thu Aug 24 08:57:41 MAILER-DAEMON
(connect to mail.yyxinyou.bid[103.214.108.62]:25: Connection timed out)
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.

63EB7814 8862 Wed Aug 23 16:46:55 MAILER-DAEMON
(connect to n022wz74g.setsparents.stream[192.140.20.244]:25: Connection refused)
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.

 

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 1x1 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 == "
 Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo." ) print $1 }' | tr -d '!*' | postsuper -d -

 

Coloca en espera (hold) los correos de un usuario
# postqueue -p | awk 'BEGIN { RS = "" } { if ($7 == "
 Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo." ) 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!!