guia · bounce de e-mail

Como uma equipe de produto deve diagnosticar e tratar bounces de e-mail com segurança?

Trate um bounce de e-mail como uma evidência de entrega vinculada a um destinatário e a uma tentativa, e não como uma flag genérica de falha. Preserve o identificador da mensagem original, o remetente do envelope, o destinatário, o código de status SMTP ou estendido, o diagnóstico, o servidor que reportou e o horário do evento. Separe uma rejeição SMTP imediata de uma notificação de status de entrega posterior. Tente novamente apenas resultados temporários 4.x, com backoff limitado e limites de idade na fila; interrompa e suprima as novas tentativas daquele destinatário após uma falha permanente 5.x confirmada. Autentique os eventos do provedor, remova duplicatas, evite gerar backscatter e mantenha como estados separados a aceitação pelo provedor, a aceitação pelo servidor de destino, a não entrega posterior e a chegada à caixa de entrada.

Identifique onde a falha foi observada

Um produto pode saber de uma não entrega durante a transação SMTP ao vivo, por uma notificação de status de entrega posterior ou por um evento autenticado do provedor. Essas observações têm evidências diferentes. Uma recusa imediata no RCPT TO se aplica àquele destinatário antes de os dados da mensagem serem aceitos. Uma rejeição na etapa DATA pode se aplicar à transação enviada. Um DSN posterior informa que um sistema assumiu a responsabilidade e depois não conseguiu entregar ou retransmitir a mensagem. Registre a etapa, o servidor, o escopo do destinatário, a tentativa, o timestamp, a resposta SMTP, o código de status estendido, o diagnóstico e os identificadores de correlação originais. Não reduza todos os casos a "bounce". Mantenha o payload bruto do provedor ou o DSN no formato padrão apenas pelo tempo que as necessidades operacionais e de política exigirem, com acesso restrito. Uma captura de tela do suporte ou uma paráfrase humana não é evidência suficiente para novas tentativas automáticas, supressão ou status exibido ao cliente.

Separe resultados temporários de permanentes

O SMTP usa respostas 4yz para conclusão negativa transitória e 5yz para conclusão negativa permanente. Os códigos de status estendidos acrescentam uma classe que começa com 4 para falha transitória persistente ou com 5 para falha permanente, seguida de valores de assunto e de detalhe. Preserve tanto o código básico quanto o estendido, porque o texto sozinho é específico de cada provedor e pode mudar. Um resultado temporário pode justificar uma nova tentativa da mesma mensagem lógica após um intervalo; não justifica loops imediatos nem permanência ilimitada na fila. Uma falha permanente de destinatário deve interromper a reexecução automática para aquele destinatário e tentativa até que o endereço ou a política mudem por meio de um processo autorizado. Não deduza hard ou soft apenas a partir de rótulos informais do provedor. Construa a política a partir do status exato, da etapa, do diagnóstico, da classe da mensagem, do destinatário e da documentação atual do provedor. Respostas desconhecidas ou malformadas devem falhar de forma fechada, indo para revisão ou para uma dead-letter queue, em vez de gerar reenvio por padrão.

Faça o parsing de notificações de status de entrega de forma defensiva

A RFC 3464 define um formato de notificação de status de entrega legível por máquina, transportado em multipart/report com campos message/delivery-status. Os campos úteis podem incluir Reporting-MTA, Final-Recipient, Action, Status, Remote-MTA, Diagnostic-Code e horários de chegada ou da última tentativa. Trate todos os campos como entrada não confiável, mesmo quando a estrutura MIME é interpretada corretamente. Limite o tamanho da mensagem, a quantidade de cabeçalhos, a quantidade de partes, o aninhamento, a decodificação de caracteres e o comprimento do diagnóstico armazenado. Nunca execute anexos, não siga automaticamente links do diagnóstico e não aceite um endereço de destinatário como identidade do tenant. Faça a correlação com uma tentativa pertencente à aplicação usando um identificador de mensagem do provedor estável, os metadados originais do envelope ou um cabeçalho de correlação que preserve a privacidade. Um DSN pode conter partes da mensagem original e dados do destinatário, então restrinja os logs e a retenção. Se a correlação for ambígua, preserve a evidência sem suprimir um endereço não relacionado e sem revelar o histórico de mensagens de outro tenant.

Modele as transições de estado por destinatário

Uma mensagem pode ter vários destinatários e receber resultados diferentes. Armazene o status por destinatário e por tentativa, não apenas na linha da mensagem. Um provedor pode aceitar alguns comandos RCPT e recusar outros, ou informar depois a entrega para um destinatário e a falha para outro. Defina transições monotônicas, para que um evento atrasado de aceitação ou de adiamento não sobrescreva uma falha permanente, uma reclamação ou um descadastro confirmados depois. Preserve o histórico de eventos e derive o estado atual exibido por meio de regras de precedência explícitas. Separe enviado, aceito pelo provedor, aceito pelo servidor do destinatário, adiado temporariamente, com falha permanente, suprimido, com reclamação, descadastrado e desconhecido. A aceitação pelo servidor de destino ainda não revela a pasta final na caixa postal nem a leitura por uma pessoa. Faça com que as novas tentativas criem tentativas vinculadas sob a mesma chave de evento lógico, para que o risco de duplicação e as evidências continuem visíveis. Não marque uma nova tentativa planejada como uma nova ação do cliente.

Tente novamente as falhas transitórias com limites rígidos

Para resultados transitórios elegíveis, agende backoff exponencial com jitter, um número finito de tentativas e uma idade máxima na fila. Use o comportamento de novas tentativas documentado pelo provedor e não empilhe um loop agressivo da aplicação sobre um relay que já faz novas tentativas. Mantenha a mesma identidade lógica da mensagem e a verificação de supressão em cada tentativa. Pare de tentar quando o destinatário for suprimido, o consentimento mudar, o evento expirar, a identidade do remetente for revogada ou chegar uma resposta permanente posterior. Aplique limite de taxa por tenant, domínio de destino, remetente e classe de falha, para que a indisponibilidade de um único destinatário não monopolize a fila. Respeite o Retry-After ou as orientações documentadas de adiamento quando existirem, mas nunca trate conteúdo arbitrário da mensagem como instrução de nova tentativa. Crie alertas para idade crescente na fila, códigos temporários repetidos, domínios incomuns e tentativas perto de expirar. Um código transitório pode mascarar um problema persistente de política ou de reputação; novas tentativas limitadas ganham tempo para a recuperação, não dão permissão para ignorar a causa.

Suprima as falhas permanentes de destinatário confirmadas

Uma falha permanente confirmada de endereço ou de caixa postal deve atualizar um registro de supressão do próprio produto antes que qualquer job posterior seja enviado. Armazene o tenant, a chave normalizada do destinatário, o escopo, o evento de origem, a categoria de status e diagnóstico, o horário de vigência e a referência da evidência, sem expor o endereço amplamente. Aplique a supressão no momento do envio, e não apenas na importação de listas. Diferencie endereço inválido, domínio inexistente, rejeição por política, rejeição pelo conteúdo da mensagem, falha de autenticação, cota e reputação do remetente, porque as soluções seguras para cada caso são diferentes. Um destinatário inválido justifica uma supressão restrita a ele; uma rejeição por autenticação do remetente deve pausar a configuração do remetente, e não suprimir todos os destinatários. Proteja a remoção manual com autorização forte, um motivo e histórico de auditoria. Uma reconfirmação ou correção deve criar uma nova decisão verificada, e não apagar a evidência antiga. As listas de supressão dos provedores são úteis, mas não substituem um registro de consentimento e de segurança da própria aplicação, especialmente durante uma migração de provedor.

Evite loops de bounce e backscatter

O SMTP usa um reverse path nulo nas notificações de status de entrega para que uma falha ao entregar a notificação não gere outro bounce. Preserve esse comportamento nos relays e não envie respostas automáticas a DSNs, a respostas automáticas ou a mensagens com sinais de geração automatizada. A RFC 3834 traz recomendações para respostas automáticas de e-mail, incluindo preocupações com loops e amplificação. Nunca gere um bounce para um endereço From visível não verificado depois de aceitar uma mensagem suspeita, porque identidades de remetente forjadas podem transformar o sistema em uma fonte de backscatter. Rejeite destinatários inválidos durante o SMTP sempre que possível, em vez de aceitar e depois notificar um endereço forjado. Limite as respostas automáticas por remetente e por conversa e use identidades de resposta controladas. Um webhook do produto ou um evento interno de erro costuma ser mais seguro do que gerar um novo e-mail na Internet. Teste From forjado, remetente de envelope nulo, DSN repetido, cabeçalhos auto-submitted, tráfego de listas de e-mail e relatórios malformados em fixtures isoladas.

Autentique os eventos do provedor antes de aplicá-los

Se um provedor entregar eventos de bounce por webhooks, valide a assinatura ou o mecanismo de autenticação documentado sobre a requisição exata antes de fazer o parsing dos campos de negócio. Exija timestamps recentes, proteção contra replay, limites de tamanho do corpo e correlação com o tenant. Persista ou enfileire o evento autenticado antes de retornar sucesso e, depois, remova duplicatas usando um identificador de evento do provedor estável ou uma chave composta conservadora que não possa misturar destinatários ou tentativas. Armazene o horário da ocorrência separado do horário de processamento, porque os eventos podem chegar atrasados e fora de ordem. Rejeite eventos cujo domínio de remetente, conta, workspace, identificador de mensagem ou escopo de destinatário não possa ser vinculado ao tenant esperado. Rotacione os segredos de webhook separadamente das credenciais SMTP ou de API. Monitore falhas de assinatura, taxas de duplicação, atraso, dead letters e tipos de evento desconhecidos. Um webhook autenticado prova a origem com o segredo configurado; ele não prova que o evento foi associado ao job interno correto até que a correlação seja bem-sucedida.

Diagnostique pela família de status, e não por palavras adivinhadas

Comece pelo assunto do status estendido: status do endereço, status da caixa postal, status do sistema de e-mail, status de rede ou roteamento, status do protocolo de entrega, status do conteúdo ou da mídia da mensagem, ou status de segurança e política. Depois, use o código de detalhe e o diagnóstico completo com a documentação atual do destinatário ou do provedor. Verifique a sintaxe do destinatário e o DNS do domínio em falhas de endereço; a existência da caixa postal e evidências de cota em falhas de caixa postal; MX, roteamento, TLS e evidências de rede em falhas de transporte; tamanho, MIME, codificação e conteúdo em falhas da mensagem; e SPF, DKIM, DMARC, credenciais, política do remetente ou reputação em falhas de segurança. Mude uma variável por novo teste controlado. Não troque IPs, domínios ou provedores para contornar uma decisão de política permanente. Preserve a resposta original e reverta qualquer mudança de configuração que amplie a autoridade do remetente ou enfraqueça a autenticação sem corrigir a causa observada.

Meça a saúde dos bounces sem vazar dados de destinatários

Acompanhe, por coortes que preservem a privacidade, a aceitação na primeira tentativa, os adiamentos temporários, as falhas permanentes, a recuperação por novas tentativas, os resultados desconhecidos, as reclamações, as supressões e a idade na fila. Dimensões úteis incluem o domínio do remetente, o domínio de destino em um nível de agregação aprovado, a classe da mensagem, a revisão do template, o provedor, a família de status e o tempo. Evite endereços completos, conteúdo das mensagens, blocos de diagnóstico ou cabeçalhos brutos nos analytics de rotina. Separe a taxa de destinatários inválidos das falhas de política, autenticação, conteúdo, reputação e infraestrutura transitória; uma única taxa de bounce esconde causas acionáveis. Use denominadores baseados em tentativas por destinatário e atribua os eventos tardios à coorte original. Defina alertas a partir de linhas de base históricas e do risco do negócio, e não de uma porcentagem universal. Audite a aplicação das supressões e as substituições manuais. Retenha apenas as evidências necessárias para operação, segurança, obrigações legais e disputas e, depois, exclua ou agregue esses dados. Uma taxa de bounce baixa não prova consentimento, engajamento nem chegada à caixa de entrada.

Como o SendHQ se encaixa

O SendHQ documenta o rastreamento de entrega e bounce, além de supressões. Consulte a documentação atual sobre os comportamentos suportados.

Perguntas frequentes

O que é um bounce de e-mail?

É a evidência de que um destinatário SMTP ou uma tentativa de entrega posterior falhou ou foi adiada, reportada durante o SMTP, por um DSN ou por um evento do provedor.

Qual é a diferença entre um bounce 4xx e um 5xx?

Uma resposta 4xx é transitória e pode justificar novas tentativas limitadas. Uma resposta 5xx é permanente para aquela tentativa e normalmente exige correção ou supressão.

Todo endereço com bounce deve ser suprimido?

Não. Suprima as falhas permanentes de destinatário confirmadas. Falhas de autenticação do remetente, de conteúdo, de reputação, de cota ou de infraestrutura temporária exigem soluções com escopos diferentes. Aplique a solução à causa observada e ao escopo do destinatário.

Uma mensagem pode ter bounce parcial?

Sim. O SMTP pode aceitar alguns destinatários e recusar outros, e DSNs posteriores podem informar resultados diferentes por destinatário. Armazene o estado por destinatário.

Como devem ser feitas as novas tentativas de bounces transitórios?

Use o mesmo job lógico durável, com backoff exponencial, jitter, limites de tentativas e de idade na fila e uma nova verificação de supressão antes de cada tentativa.

Uma resposta SMTP 250 impede um bounce posterior?

Não. Um servidor pode assumir a responsabilidade e depois gerar evidência de não entrega. A aceitação pelo destino também não garante a chegada à caixa de entrada nem o engajamento de uma pessoa.

Por que as mensagens de bounce devem usar um reverse path nulo?

Um reverse path nulo impede que falhas na entrega de um DSN gerem outro DSN, o que evita loops de bounce e amplificação.

O SendHQ trata bounces?

Sim. O SendHQ documenta o rastreamento de entrega e bounce, além de supressões.

Fontes