Eu tenho um problema muito chato aqui. Estive testando um aplicativo e criei alguns e-mails de teste para endereços de e-mail falsos (sem mencionar que meu servidor não está configurado para enviar e-mails de qualquer maneira). Claro, sendmail
não é possível enviar essas mensagens e elas ficam presas na sendmail
fila. Quero excluir manualmente as mensagens que estão se acumulando na fila, em vez de esperar os 5 dias que sendmail
normalmente levam para parar de tentar novamente.
Estou usando o Ubuntu 10.04 e /var/spool/mqueue/
é o diretório no qual todos os procedimentos que li dizem que os e-mails que estão na fila são mantidos. Quando excluo os arquivos deste diretório, sendmail
paro de tentar processar os e-mails até que o que parece ser um script cron seja executado e preencha novamente esse diretório com as mensagens que não quero que sejam enviadas. Aqui estão algumas linhas do meu 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)
Alguém sabe como posso me livrar dessas mensagens permanentemente? Como observação, também gostaria de saber se existe uma maneira de configurar sendmail
o envio de e-mail "falso". Existe?
Responder1
As mensagens que foram enviadas ou que estão tentando ser enviadas são armazenadas em formato /var/spool/mqueue
. As mensagens que o Sendmail ainda não tentou colocar na fila podem ser encontradas em /var/spool/mqueue-client
.
Então tente isso (presumo que você queira se livrartodosmensagens na fila):
- Pare de enviar e-mail
rm /var/spool/mqueue/*
- Se você deseja remover mensagens em espera,
rm /var/spool/mqueue-client/*
. - Inicie o sendmail
Isso limpará nossas pastas de fila até que o sistema receba outra mensagem. Você pode verificar novamente executando mailq
(ambas as pastas da fila) ou sendmail -bp
(apenas a pasta da fila).
OBSERVAÇÃO: Na maioria das distribuições Linux você pode iniciar/parar serviços com service sendmail <start|stop|restart>
ou /etc/init.d/sendmail <start|stop|restart>
. Ambas as opções possuem muitos outros sinalizadores de status que podem ser observados digitando o comando e o serviço sem os sinalizadores de status.
Responder2
Freqüentemente, você encontrará sugestões para remover arquivos do diretório mqueue do Sendmail, por exemplo rm /var/spool/mqueue/*
ou pior ( rm -rf
etc.). IMHO, isso é totalmente perigoso. Funcionará em muitos casos, mas recomendo apertar os cintos de segurança. A simples remoção de todos os arquivos do mqueue pode excluir mensagens legítimas.
Interromper o Sendmail antes de remover mensagens na fila é um bom conselho, especialmente se muitas mensagens precisarem ser removidas. No entanto, se apenas algumas mensagens forem removidas ou se a fila for limpa regularmente, por exemplo, por meio de um cron job, não há necessidade de parar o Sendmail. Na pior das hipóteses, uma das mensagens será colocada novamente na fila e quase certamente será removida quando você tentar novamente.
Pelo contrário, parar o Sendmail (por exemplo, no Ubuntu com service sendmail stop
) pode não ser suficiente. Mesmo quando interrompidos, alguns processos (filhos) ainda podem estar em execução. Seria necessário esperar até que terminassem (recomendado) ou matá-los.
Para remover mensagens do mqueue com segurança, você precisa dos IDs das filas de mensagens. Os IDs são mostrados no log após "sm-mta[...]:". Os IDs do seu trecho de log são o530SlbK009365
, o4VHn3cw003597
, ... Para cada um dos IDs, 2 arquivos são armazenados no mqueue, um começando com "qf" e o outro começando com "df".
mailq
geralmente é usado para listar o conteúdo da fila. Mostra os IDs na primeira coluna. Além disso, você deve consultar mailq
a saída do porque ela também mostra se uma mensagem está ativa/sendo processada no momento. Por exemplo
-----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]>
Neste exemplo, a mensagem com ID oBDDuKAB023946
está sendo processada, mostrada pelo asterisco anexado. Outras mensagens podem ser removidas com segurança. Por exemplo, para remover a mensagem com ID oBAEMuV8000429
use
rm /var/spool/mqueue/{d,q}foBAEMuV8000429
Uma abordagem mais versátil para remover mensagens na fila é fornecida por Brandon Hutchinson emExcluindo e-mails da fila de e-mails. Brandon também inclui scripts para remover mensagens com base na parte do domínio, endereço de e-mail, etc. Os scripts de Brandon são muito úteis para limpeza regular ou remoção em massa.
No entanto, mesmo os scripts de Brandon não cuidam do status das mensagens. No entanto, é fácil adicionar. Incluir no início de seus scripts
# Get current mailq status
my $mailq = `mailq`;
Então, no início da sub-rotina "querido", adicione uma marca para pular mensagens ativas, por exemplo, com
# skip if file is currently processed by MTA
if ($mailq =~ /\n$queue_id\*/) {
$debug && print "$queue_id is locked.\n";
last;
}
HTH. E lembre-se de fazer backups :-)
Responder3
Eu tive esse mesmo problema e descobri que havia 2 pastas com mensagens na fila. A pasta /var/spool/clientmqueue/ tinha mensagens que terminavam em /var/spool/mqueue/ caso não fossem entregues. A exclusão dos arquivos de ambas as pastas foi necessária para resolver o problema.
rm -f /var/spool/clientmqueue/* rm -f /var/spool/mqueue/*
Responder4
Eu consegui fazer isso usando este script bash
for i in `sudo ls /var/spool/mqueue`
do
sudo rm -rv `echo /var/spool/mqueue/$i`
done