4325 Views
Este post explica como trabalhar com mensagens na fila do Postfix, serviço de e-mail responsável pelo envio de mensagens em servidores Linux.
Verificando a fila de mensagens
Primeiramente, vejamos como visualizar a fila de mensagens enfileiradas, deferred ou com alguma pendência:
mailq
ou
postqueue -p
A saída para os comandos acima será similar a esta:
96C9D1D1620* 19859 Wed Nov 25 16:35:57 [email protected] [email protected]
Portanto, os comandos acima exibem as mensagens na fila do Postfix, o Message ID, o remetente e o destinatário, mas não o conteúdo da mensagem.
Com posse do Message ID podemos visualizar o conteúdo da mensagem, além de detalhes do header, entre outras coisas. Para isso utilizaremos o comando que veremos a seguir.
Visualizando o conteúdo das mensagens
Para visualizar o conteúdo de uma mensagem, utilizamos o comando “postcat” como neste exemplo:
postcat -vq MESSAGEID
O exemplo da mensagem acima, seria:
postcat -vq 96C9D1D1620
A saída do comando acima seria similar a esta:
[email protected]:~ postcat -vq D576011ED32 postcat: name_mask: all postcat: inet_addr_local: configured 2 IPv4 addresses postcat: inet_addr_local: configured 2 IPv6 addresses *** ENVELOPE RECORDS deferred/D/D576011ED32 *** message_size: 705 713 1 0 705 message_arrival_time: Tue Nov 24 19:30:25 2015 create_time: Tue Nov 24 19:30:25 2015 named_attribute: log_ident=D576011ED32 named_attribute: rewrite_context=remote sender: [email protected] named_attribute: log_client_name=serverteste.org named_attribute: log_client_address=192.168.0.1 named_attribute: log_client_port=43434 named_attribute: log_message_origin=serverteste.org[192.168.0.1] named_attribute: log_helo_name=serverteste.org named_attribute: log_protocol_name=ESMTP named_attribute: client_name=serverteste.org named_attribute: reverse_client_name=serverteste.org named_attribute: client_address=192.168.0.1 named_attribute: client_port=43434 named_attribute: helo_name=serverteste.org named_attribute: protocol_name=ESMTP named_attribute: client_address_type=2 named_attribute: dsn_orig_rcpt=rfc822;[email protected] original_recipient: [email protected] recipient: [email protected] *** MESSAGE CONTENTS deferred/D/D576011ED32 *** regular_text: Received: from serverteste.org (serverteste.org [192.168.0.1]) regular_text: by localhost.localdomain (Postfix) with ESMTP id D576011ED32 regular_text: for <[email protected]>; Tue, 24 Nov 2015 19:30:25 -0200 (BRST) regular_text: Date: Tue, 24 Nov 2015 19:31:36 -0200 regular_text: To: Teste - Gmail <[email protected]> regular_text: From: Wiliam - Blog Porta 80 <[email protected]> regular_text: Subject: [TESTE ] - Teste phpmailer regular_text: Message-ID: <[email protected]> regular_text: X-Priority: 3 regular_text: X-Mailer: PHPMailer 5.2.1 (https://code.google.com/a/apache-extras.org/p/phpmailer/) regular_text: MIME-Version: 1.0 regular_text: Content-Transfer-Encoding: 8bit regular_text: Content-Type: text/plain; charset="iso-8859-1" regular_text: regular_text: regular_text: OK OK OK regular_text: regular_text: *** HEADER EXTRACTED deferred/D/D576011ED32 *** named_attribute: encoding=8bit *** MESSAGE FILE END deferred/D/D576011ED32 ***
Forçando o Postfix a processar a fila
Com o comando abaixo o Postfix processará a fila de e-mails.
postqueue -f
ou
postfix flush

Observação: Ao fazer isso repetidamente em uma fila com mensagens que não podem ser enviadas, ocasionará problema de baixo envio e performance em toda a fila.
Por isso é importante manter sua fila de mensagens “saudável” e remover aquelas mensagens que estão largadas na fila.
Deletando mensagens da fila
Em algumas situações é preciso remover mensagens da fila. Seja porque a mensagem não é entregue nunca, seja porque o programador sem noção fez um mail bomb com disparos em lotes de 1.000 mensagens a cada 10 segundos ou porque o estagiário fez um script que enviou 1.000.000 de mensagens e está travando o servidor como um todo.
Para deletar uma mensagem em específico, utiliza-se o comando abaixo:
[email protected]:~# postsuper -d D576011ED32 postsuper: D576011ED32: removed postsuper: Deleted: 1 message
Para deletar apenas mensagens deferred, utilize o comando a seguir:
[email protected]:~# postsuper -d ALL deferred postsuper: Deleted: 1387 messages
Para deletar todas mensagens, utiliza-se o comando abaixo:
postsuper -d ALL postsuper: Deleted: 458 messages