Tengo un problema bastante molesto aquí. He estado probando una aplicación y he creado algunos correos electrónicos de prueba para direcciones de correo electrónico falsas (sin mencionar que mi servidor no está realmente configurado para enviar correos electrónicos de todos modos). Por supuesto, sendmail
no puede enviar estos mensajes y se ha quedado atascado en la sendmail
cola. Quiero eliminar manualmente los mensajes que se han ido acumulando en la cola en lugar de esperar los 5 días que sendmail
normalmente lleva dejar de volver a intentarlo.
Estoy usando Ubuntu 10.04 y /var/spool/mqueue/
es el directorio en el que cada instructivo que he leído dice que se guardan los correos electrónicos que están en cola. Cuando elimino los archivos en este directorio, sendmail
dejo de intentar procesar los correos electrónicos hasta que se ejecuta lo que parece ser un script cron y vuelve a llenar este directorio con los mensajes que no quiero enviar. Aquí hay algunas líneas de mi syslog
:
Jun 2 17:35:19 sajo-laptop sm-mta[9367]: o530SlbK009365: to=, ctladdr= (33/33), delay=00:06:27, xdelay=00:06:22, mailer=esmtp, pri=120418, relay=e.mx.mail.yahoo.com. [67.195.168.230], dsn=4.0.0, stat=Deferred: Connection timed out with e.mx.mail.yahoo.com.
Jun 2 17:35:48 sajo-laptop sm-mta[9149]: o4VHn3cw003597: to=, ctladdr= (33/33), delay=2+06:46:45, xdelay=00:34:12, mailer=esmtp, pri=3540649, relay=mx2.hotmail.com. [65.54.188.94], dsn=4.0.0, stat=Deferred: Connection timed out with mx2.hotmail.com.
Jun 2 17:39:02 sajo-laptop CRON[9510]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm)
Jun 2 17:39:43 sajo-laptop sm-mta[9372]: o52LHK4s007585: to=, ctladdr= (33/33), delay=03:22:18, xdelay=00:06:28, mailer=esmtp, pri=1470404, relay=c.mx.mail.yahoo.com. [206.190.54.127], dsn=4.0.0, stat=Deferred: Connection timed out with c.mx.mail.yahoo.com.
Jun 2 17:39:50 sajo-laptop sm-mta[9149]: o51I8ieV004377: to=, ctladdr= (33/33), delay=1+06:31:06, xdelay=00:03:57, mailer=esmtp, pri=6601668, relay=alt4.gmail-smtp-in.l.google.com. [74.125.79.114], dsn=4.0.0, stat=Deferred: Connection timed out with alt4.gmail-smtp-in.l.google.com.
Jun 2 17:40:01 sajo-laptop CRON[9523]: (smmsp) CMD (test -x /etc/init.d/sendmail && /usr/share/sendmail/sendmail cron-msp)
¿Alguien sabe cómo puedo deshacerme de estos mensajes de forma permanente? Como nota al margen, también me gustaría saber si hay alguna forma de configurar sendmail
el envío de correo electrónico "falso". ¿Está ahí?
Respuesta1
Los mensajes que se han enviado o 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 detodomensajes en la cola):
- detener el envío de correo
rm /var/spool/mqueue/*
- Si desea eliminar mensajes en espera,
rm /var/spool/mqueue-client/*
. - Iniciar enviar correo
Esto borrará nuestras carpetas de cola hasta que el sistema reciba otro mensaje. Puede volver a verificar ejecutando mailq
(ambas carpetas de la 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 <start|stop|restart>
o /etc/init.d/sendmail <start|stop|restart>
. Ambas opciones tienen muchos otros indicadores de estado que se pueden observar escribiendo el comando y el servicio sin los indicadores de estado.
Respuesta2
A menudo encontrará la sugerencia de eliminar archivos del directorio mqueue de Sendmail, por ejemplo rm /var/spool/mqueue/*
o algo 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 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 sólo se van a eliminar unos pocos mensajes o si la cola se limpia periódicamente, por ejemplo mediante una tarea cron, en realidad no hay necesidad de detener Sendmail. En el peor de los casos, uno de los mensajes se volverá a poner en cola y es casi seguro que se eliminará cuando vuelva a intentarlo.
Por el contrario, detener Sendmail (por ejemplo, en Ubuntu con service sendmail stop
) podría no ser suficiente. Incluso cuando se detiene, es posible que algunos procesos (secundarios) aún se estén ejecutando. Habría que esperar hasta que terminen (recomendado) o matarlos.
Para eliminar mensajes de mqueue de forma segura, necesita los ID de la cola de mensajes. Los ID se muestran en el registro después de "sm-mta[...]:". Los ID del extracto de su 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
generalmente se usa para enumerar el contenido de la cola. Muestra los ID en la primera columna. Además, debe consultar mailq
el resultado de porque también muestra si un mensaje está activo o actualmente 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, como se muestra con el asterisco adjunto. Es seguro eliminar otros mensajes. Por ejemplo, para eliminar el mensaje con ID, oBAEMuV8000429
use
rm /var/spool/mqueue/{d,q}foBAEMuV8000429
Brandon Hutchinson proporciona un enfoque más versátil para eliminar mensajes en cola enEliminar correo de la cola de correo. Brandon también incluye scripts para eliminar mensajes según la parte del dominio, la dirección de correo electrónico, etc. Los scripts de Brandon son muy útiles para una limpieza regular o una eliminación masiva.
Sin embargo, ni siquiera los guiones de Brandon se ocupan del estado de los mensajes. Sin embargo, es fácil de agregar. Incluir al principio de sus guiones.
# Get current mailq status
my $mailq = `mailq`;
Luego, al comienzo de la subrutina "se busca", agregue una marca para omitir 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 :-)
Respuesta3
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. Fue necesario eliminar los archivos de ambas carpetas para resolver el problema.
rm -f /var/spool/clientmqueue/* rm -f /var/spool/mqueue/*
Respuesta4
Logré hacer esto usando este script bash
for i in `sudo ls /var/spool/mqueue`
do
sudo rm -rv `echo /var/spool/mqueue/$i`
done