Como excluo permanentemente mensagens de e-mail da fila do sendmail e evito que elas voltem?

Como excluo permanentemente mensagens de e-mail da fila do sendmail e evito que elas voltem?

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, sendmailnão é possível enviar essas mensagens e elas ficam presas na sendmailfila. Quero excluir manualmente as mensagens que estão se acumulando na fila, em vez de esperar os 5 dias que sendmailnormalmente 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, sendmailparo 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 sendmailo 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 -rfetc.). 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".

mailqgeralmente é usado para listar o conteúdo da fila. Mostra os IDs na primeira coluna. Além disso, você deve consultar mailqa 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 oBDDuKAB023946está sendo processada, mostrada pelo asterisco anexado. Outras mensagens podem ser removidas com segurança. Por exemplo, para remover a mensagem com ID oBAEMuV8000429use

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

informação relacionada