Você encontrará frequentemente a sugestão para remover arquivos do diretório de mensagens do Sendmail com, por exemplo, rm /var/spool/mqueue/*
ou pior ( rm -rf
etc.). IMHO, isso é simplesmente perigoso. Ele vai funcionar em muitos casos, mas eu recomendo apertar seus cintos de segurança. A simples remoção de todos os arquivos do mqueue pode excluir mensagens legítimas.
Parar 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, p. por meio de um cron job, não há necessidade de parar o Sendmail. No pior dos casos, uma das mensagens será enfileirada novamente, o que quase certamente será removido quando você tentar novamente.
Ao contrário, parar 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. Um teria que esperar até que terminassem (recomendado) ou os matasse.
Para remover com segurança as mensagens do mqueue, você precisa dos IDs de fila das mensagens. Os IDs são mostrados no log após "sm-mta [...]:". Os IDs do seu extrato de log são o530SlbK009365
, o4VHn3cw003597
, ... Para cada um dos IDs 2 arquivos são armazenados em mqueue, um começando com "qf", o outro iniciando com "df".
mailq
é geralmente usado para listar o conteúdo da fila. Mostra os IDs na primeira coluna. Além disso, você deve consultar a saída de mailq
porque também mostra se uma mensagem está ativa / sendo processada atualmente. 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 atualmente, mostrada pelo asterisco anexado. Outras mensagens estão seguras para serem removidas. 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 em fila é fornecida por Brandon Hutchinson em Excluindo mensagens da fila de mensagens . Brandon também inclui scripts para remover mensagens com base na parte do domínio, endereço de e-mail, etc. Os scripts do Brandon são muito úteis para limpeza regular ou remoção em massa.
Mesmo assim, os scripts de Brandon não estão cuidando do status das mensagens. No entanto, é fácil adicionar. Incluir no início de seus scripts
# Get current mailq status
my $mailq = 'mailq';
Em seguida, no início da sub rotina "desejada", adicione um cheque para ignorar 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: -)