Eu tenho um problema bastante irritante aqui. Estou 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á realmente configurado para enviar e-mails). Obviamente, sendmail
não é possível enviar essas mensagens e elas estão ficando presas na sendmail
fila. Desejo excluir manualmente as mensagens que foram acumuladas na fila em vez de aguardar 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 em que todas as instruções que li dizem que os e-mails na fila são mantidos. Quando eu excluo os arquivos desse diretório, sendmail
para de tentar processar os emails até que o que parece ser um script cron seja executado e repovoe 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, eu também gostaria de saber se existe uma maneira de configurar o sendmail
envio de email "falso". Existe?
Respostas:
As mensagens que foram enviadas ou estão tentando ser enviadas são armazenadas
/var/spool/mqueue
. As mensagens que o Sendmail ainda não tentou enfileirar podem ser encontradas em/var/spool/mqueue-client
.Então tente isso (presumo que você queira se livrar de todas as mensagens na fila):
rm /var/spool/mqueue/*
rm /var/spool/mqueue-client/*
,.Isso limpará nossas pastas de fila até que o sistema receba outra mensagem. Você pode verificar novamente executando
mailq
(ambas as pastas da fila) ousendmail -bp
(apenas a pasta da fila).NOTA: Com a 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 têm muitos outros sinalizadores de status que podem ser observados digitando o comando e o serviço sem os sinalizadores de status.fonte
no matches found
). Entãochmod
editei as pastas777
e pude excluir o conteúdo.Você encontrará frequentemente a sugestão de remover arquivos do diretório de fila do Sendmail, por exemplo,
rm /var/spool/mqueue/*
ou pior (rm -rf
etc.). IMHO, isso é perigoso. Funcionará em muitos casos, mas recomendo apertar os cintos de segurança. Simplesmente remover todos os arquivos do mqueue pode excluir mensagens legítimas.Parar o Sendmail antes de remover as mensagens na fila é um bom conselho, especialmente se for necessário remover muitas mensagens. No entanto, se apenas algumas mensagens forem removidas ou se a fila é limpa regularmente, por exemplo, por meio de um trabalho cron, não há realmente nenhuma necessidade de interromper o Sendmail. Na pior das hipóteses, uma das mensagens será colocada na fila de espera, que quase certamente será removida quando você tentar novamente.
Pelo contrário, interromper o Sendmail (por exemplo, no Ubuntu com
service sendmail stop
) pode não ser suficiente. Mesmo quando parado, alguns processos (filhos) ainda podem estar em execução. É preciso esperar até que eles terminem (recomendado) ou matá-los.Para remover com segurança as mensagens da fila, você precisa dos IDs da fila de mensagens. Os IDs são mostrados no log após "sm-mta [...]:". Os IDs do seu trecho log são
o530SlbK009365
,o4VHn3cw003597
, ... Para cada um dos IDs 2 arquivos são armazenados em mqueue, um começando com "QF", a outra partida com "df".mailq
geralmente é usado para listar o conteúdo da fila. Ele mostra os IDs na primeira coluna. Além disso, você deve consultarmailq
a saída, pois ela também mostra se uma mensagem está ativa / sendo processada no momento. Por exemploNeste exemplo, a mensagem com o ID
oBDDuKAB023946
está sendo processada no momento, mostrada pelo asterisco anexado. Outras mensagens são seguras para serem removidas. Por exemplo, para remover a mensagem com ID,oBAEMuV8000429
useUma abordagem mais versátil para remover mensagens em fila é fornecida por Brandon Hutchinson em Excluindo emails da fila de emails . Brandon também inclui scripts para remover mensagens com base na parte do domínio, endereço de email etc. Os scripts de Brandon são muito úteis para limpeza regular ou remoção em massa.
No entanto, nem os scripts de Brandon estão cuidando do status das mensagens. No entanto, é fácil adicionar. Incluir no início de seus scripts
Em seguida, no início da sub-rotina "desejado", adicione uma verificação para pular as mensagens ativas, por exemplo, com
HTH. E lembre-se de fazer backups :-)
fonte
Eu tive esse mesmo problema e descobri que havia 2 pastas com mensagens na fila. A pasta / var / spool / clientmqueue / tinha mensagens que estavam terminando em / var / spool / mqueue / se elas falharem na entrega. A exclusão dos arquivos das duas pastas era necessária para resolver o problema.
rm -f / var / spool / clientmqueue / * rm -f / var / spool / mqueue / *
fonte
Eu não acho que este seja o trabalho de um script cron, é mais provável que seja um problema de aplicativo ou algo relacionado ao sendmail; de qualquer forma, para descartar qualquer tarefa cron, você pode parar
crond
um pouco e ver se isso continua acontecendo.fonte
Eu consegui fazer isso usando este script bash
fonte
echo
e recuperar a saída do ditoecho
para uso como parâmetro pararm
. Mesmo ignorando os garfos gratuitos desudo
erm
, esse subconjunto é um grande desperdício.sudo find /var/spool/mqueue -maxdepth 1 -delete
. Eu achei importante salientar o que é problemático em particular no seu script. Desculpas pela falta de tato.