Ten en cuenta que en la informática un problema casi siempre tiene diversas soluciones, de igual modo nosotros mostraremos lo más óptimo y eficiente.
Solución:
Solución 1:
Los mensajes que se han enviado o que se están intentando enviar se almacenan en /var/spool/mqueue
. Los mensajes que Sendmail aún no ha intentado poner en cola se pueden encontrar en /var/spool/mqueue-client
.
Así que prueba esto (supongo que quieres deshacerte de todos mensajes en la cola):
- Detener sendmail
rm /var/spool/mqueue/*
- Si desea eliminar los mensajes en espera,
rm /var/spool/mqueue-client/*
. - Iniciar sendmail
Esto borrará nuestra (s) carpeta (s) de cola hasta que el sistema reciba otro mensaje. Puede comprobarlo ejecutando mailq
(ambas carpetas de cola), o sendmail -bp
(solo la carpeta de la cola).
NOTA:Con la mayoría de las distribuciones de Linux, puede iniciar / detener servicios con service sendmail
o /etc/init.d/sendmail
. Ambas opciones tienen muchos otros indicadores de estado que se pueden observar escribiendo el comando y el servicio sin los indicadores de estado.
Solucion 2:
A menudo encontrará la sugerencia de eliminar archivos del directorio mqueue de Sendmail con, por ejemplo rm /var/spool/mqueue/*
o peor (rm -rf
etc.). En mi humilde opinión, esto es simplemente peligroso. Funcionará en muchos casos, pero recomiendo abrocharse los cinturones de seguridad. Simplemente eliminar todos los archivos de mqueue podría eliminar los mensajes legítimos.
Detener Sendmail antes de eliminar los mensajes en cola es un buen consejo, especialmente si es necesario eliminar muchos mensajes. Sin embargo, si solo se van a eliminar unos pocos mensajes o si la cola se limpia de forma regular, por ejemplo, mediante un trabajo cron, en realidad no es necesario detener Sendmail. En el peor de los casos, uno de los mensajes se volverá a poner en cola, lo que es casi seguro que se eliminará cuando vuelva a intentarlo.
Por el contrario, detener Sendmail (por ejemplo, en Ubuntu con service sendmail stop
) puede que no sea suficiente. Incluso cuando se detienen, es posible que algunos procesos (secundarios) sigan ejecutándose. Habría que esperar hasta que terminaran (recomendado) o matarlos.
Para eliminar mensajes de mqueue de forma segura, necesita los ID de cola de los mensajes. Los ID se muestran en el registro después de “sm-mta[…]: “. Los ID de su extracto de registro son o530SlbK009365
, o4VHn3cw003597
, … Para cada uno de los ID, se almacenan 2 archivos en mqueue, uno que comienza con “qf” y el otro que comienza con “df”.
mailq
se utiliza generalmente para enumerar el contenido de la cola. Muestra los ID en la primera columna. Además, debe consultar mailq
porque también muestra si un mensaje está activo o en proceso. P.ej
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient----------
oBDDuKAB023946* 1058 Mon Dec 13 14:56 <[email protected]
(Deferred: 450-4.2.1 The user you are trying to contact is re)
<[email protected]>
oBAEMuV8000429 1058 Fri Dec 10 15:22 <[email protected]
(Deferred: 450-4.2.1 The user you are trying to contact is re)
<[email protected]>
En este ejemplo, el mensaje con ID oBDDuKAB023946
se está procesando actualmente, mostrado por el asterisco adjunto. Es seguro eliminar otros mensajes. Por ejemplo, para eliminar el mensaje con ID oBAEMuV8000429
usar
rm /var/spool/mqueue/d,qfoBAEMuV8000429
Brandon Hutchinson proporciona un enfoque más versátil para eliminar mensajes en cola en Eliminar correo de la cola de correo. Brandon también incluye scripts para eliminar mensajes basados en la parte del dominio, la dirección de correo electrónico, etc. Los scripts de Brandon son muy útiles para la limpieza regular o la eliminación masiva.
Sin embargo, incluso los guiones de Brandon no se ocupan del estado de los mensajes. Sin embargo, es fácil de agregar. Incluir al comienzo de sus guiones
# Get current mailq status
my $mailq = `mailq`;
Luego, al comienzo de la subrutina “deseado”, agregue una marca para omitir los mensajes activos, por ejemplo, con
# skip if file is currently processed by MTA
if ($mailq =~ /n$queue_id*/)
$debug && print "$queue_id is locked.n";
last;
HTH. Y recuerda hacer copias de seguridad 🙂
Solucion 3:
Tuve el mismo problema y descubrí que había 2 carpetas con mensajes en cola. La carpeta / var / spool / clientmqueue / tenía mensajes que terminaban en / var / spool / mqueue / si no se entregaban. Era necesario eliminar los archivos de ambas carpetas para resolver el problema.
rm -f / var / spool / clientmqueue / * rm -f / var / spool / mqueue / *
Te mostramos comentarios y calificaciones
Tienes la opción de añadir valor a nuestra información colaborando tu veteranía en las referencias.