Infraestrutura de e-mail

Descadastro com um clique, o cabeçalho que de fato conta.

O requisito de remetente em massa mais subimplementado não é o link de descadastro do rodapé — é o cabeçalho List-Unsubscribe-Post que o Gmail e o Yahoo buscam especificamente. O um clique da RFC 8058 precisa de dois cabeçalhos (List-Unsubscribe com um URI HTTPS, e List-Unsubscribe-Post com o valor exato List-Unsubscribe=One-Click), ambos assinados com DKIM, mais um endpoint HTTPS que complete o descadastro em POST e devolva 200 — sem login, sem redirecionamento, sem página de confirmação. Faça certo e reduz as reclamações de spam; faça errado e os scanners de links podem descadastrar a sua gente por você.

Em resumo

  • O link do rodapé não basta. O e-mail promocional em massa precisa do um clique baseado em cabeçalho, não só de um link no corpo.
  • Dois cabeçalhos, ambos assinados com DKIM. List-Unsubscribe (URI HTTPS) mais List-Unsubscribe-Post com o valor exato List-Unsubscribe=One-Click.
  • Só POST, nunca GET. Descadastre em POST e devolva 200; um descadastro por GET deixa os scanners descadastrarem as pessoas por acidente.
  • Sem redirecionamento, sem página de preferências. O endpoint deve completar o descadastro ele mesmo, dentro de 48 horas.
  • Só promocional. O e-mail transacional — redefinições, recibos, confirmações — está isento.

Por que o link de descadastro do rodapé já não basta?

Por anos o link de descadastro no fim do e-mail era a história toda. Desde que o Gmail e o Yahoo começaram a aplicar as regras de remetente em massa em 2024, é só metade. Os provedores agora esperam um mecanismo de um clique baseado em cabeçalho que a própria interface deles possa disparar — um botão nativo de Cancelar inscrição ao lado do seu nome de remetente que completa o descadastro sem enviar o destinatário a uma página externa. O link do rodapé segue obrigatório, pela lei antispam e pelos provedores, mas por si só já não cumpre o requisito para o e-mail promocional.

O raciocínio é de comportamento, e é o sentido inteiro do padrão. Quando sair de uma lista é de fato um clique, os destinatários o usam; quando está enterrado ou é incômodo, a alternativa deles é apertar Marcar como spam. Os provedores de caixa sabem que os usuários não distinguem entre descadastrar e marcar como lixo, então premiam os remetentes que tornam a saída sem atrito. Uma saída limpa de um clique que não conta como reclamação de spam é, na prática, uma alavanca direta sobre a taxa de reclamações que decide a sua entregabilidade.

Por isso este único cabeçalho pesa tanto em relação ao seu tamanho. Os dados de referência nomeiam vez após vez o cabeçalho List-Unsubscribe-Post como o requisito de remetente em massa mais subimplementado: os times adicionam um link visível no rodapé, veem uma opção de descadastro no próprio e-mail e dão como certo que cumprem — enquanto omitem o único cabeçalho que o Gmail de fato verifica. A lacuna é pequena de corrigir e cara de ignorar, porque desde o fim de 2025 omiti-la pode levar você da entrega adiada à rejeição direta.

O que são exatamente os dois cabeçalhos?

O um clique é um par de cabeçalhos que trabalham juntos, definidos pela RFC 8058 (o sinal de um clique via POST, sobre os cabeçalhos List-* da RFC 2369). O primeiro anuncia o mecanismo de descadastro; o segundo sinaliza que ele é de fato um clique e que deve ser processado com um POST HTTP. Omita qualquer um dos dois e você não tem um clique — tem um link comum.

cabeçalhos da mensagem — e-mail promocional
# Dois cabeçalhos em cada mensagem promocional — ambos assinados com DKIM
List-Unsubscribe: <https://example.com/u/9f2c4a8e>,
                  <mailto:unsub@example.com?subject=unsubscribe>
List-Unsubscribe-Post: List-Unsubscribe=One-Click
# o valor de -Post deve ser EXATAMENTE este; é o sinal de um clique
O par exigido: um URI HTTPS dentro de colchetes angulares, mais o sinal exato de um clique.

Três detalhes decidem se isto funciona. O cabeçalho List-Unsubscribe deve conter ao menos um URI HTTPS, dentro de colchetes angulares — os colchetes ausentes são o motivo mais comum de um cabeçalho estar presente e não fazer nada. O valor de List-Unsubscribe-Post deve ser exatamente List-Unsubscribe=One-Click. E ambos os cabeçalhos devem estar cobertos por uma assinatura DKIM válida e alinhada, porque um receptor que não consegue verificá-los pode ignorá-los por completo — que é como falham em silêncio os cabeçalhos injetados por middleware após a assinatura.

Incluir um URI mailto: junto ao HTTPS é boa prática, mas um mailto por si só não cumpre o requisito, porque não pode garantir o processamento instantâneo e automatizado. O URI HTTPS é o que carrega o mecanismo POST; o mailto está ali para o Apple Mail e os clientes antigos que o preferem.

O próprio URI HTTPS merece um momento de reflexão, porque é onde a segurança e a confiabilidade se encontram. A RFC 8058 recomenda que a URL de descadastro carregue um identificador opaco e difícil de falsificar em vez de um endereço de e-mail em texto claro na string de consulta. A razão é dupla: um endereço em claro é trivial de manipular para qualquer um, e vaza o endereço do destinatário para qualquer coisa que registre URLs pelo caminho. Um token opaco — uma string aleatória e imprevisível que o seu sistema mapeia de volta ao destinatário e à lista corretos — permite que o POST se complete de imediato mantendo o endereço privado e a requisição difícil de abusar. Também significa que a URL carrega tudo o que o endpoint precisa para agir por si só, que é justo o que o um clique exige: o descadastro deve ter êxito a partir do POST só, sem o endpoint recorrer a uma sessão, um cookie ou um estado de sessão iniciada que o servidor de um provedor de caixa nunca terá.

Implementação

Implementá-lo de ponta a ponta

Seis passos, de separar os seus fluxos a verificar sobre uma mensagem entregue. Um engenheiro competente o entrega numa tarde — o valor está em acertar os detalhes exatos.

  1. 1

    Identifique os seus fluxos promocionais

    O um clique se aplica ao e-mail de marketing e de assinatura, não ao transacional. O primeiro passo não é adicionar cabeçalhos a tudo — é separar os fluxos promocionais (boletins, campanhas) das redefinições de senha, recibos e confirmações, que estão isentos.

  2. 2

    Gere um token opaco por destinatário

    Construa uma URL de descadastro que identifique o destinatário e a lista bem o bastante para agir de imediato, usando um token opaco difícil de falsificar em vez de um endereço de e-mail em texto claro. O POST deve carregar tudo o que é necessário para completar o descadastro por si só.

  3. 3

    Adicione ambos os cabeçalhos, assinados com DKIM

    Adicione List-Unsubscribe com um URI HTTPS (e um mailto para o Apple Mail), mais List-Unsubscribe-Post com o valor exato List-Unsubscribe=One-Click. Ambos os cabeçalhos devem estar dentro da assinatura DKIM, ou os receptores podem ignorá-los.

  4. 4

    Construa um endpoint POST que complete o descadastro

    O endpoint HTTPS deve descadastrar o destinatário e devolver 200 OK em POST, sem login, sem cadeia de redirecionamentos e sem página de confirmação. E algo crucial: nunca descadastre em GET — os scanners pré-carregam os links e descadastrarão as pessoas em silêncio.

  5. 5

    Suprima em tempo real, dentro de 48 horas

    Processe o descadastro de imediato e pare de enviar dentro da janela de 48 horas que os provedores exigem. Um trabalho em lote adiado significa que as pessoas seguem recebendo e-mail após o descadastro, que é justo quando as reclamações de spam disparam.

  6. 6

    Verifique sobre a mensagem entregue

    Envie uma mensagem real pela rota real de campanha e leia os cabeçalhos entregues em bruto — não um envio de teste — porque alguns sistemas adicionam os cabeçalhos numa rota mas não em outra. Depois faça POST ao endpoint com curl para confirmar que de fato remove o destinatário.

O detalhe que pega os times mais cuidadosos é o problema das múltiplas rotas: o e-mail de campanha, o de ciclo de vida e os mailers legados costumam viajar por rotas diferentes, e uma rota põe os cabeçalhos certos enquanto outra, em silêncio, não. Verificar sobre a mensagem real entregue, não um teste, é o que o traz à luz.

Como verifico que funciona de verdade?

Não o julgue por se o botão aparece na caixa. O botão de Cancelar inscrição frequentemente não é exibido num envio de teste mesmo quando a implementação é perfeita, em parte porque os provedores pesam a reputação do remetente antes de exibi-lo. A única verificação confiável é ler os cabeçalhos em bruto de uma mensagem entregue e depois exercitar o endpoint diretamente.

verifique o endpoint POST
# Verifique que o endpoint descadastra só com POST — sem login, sem redirecionamento, 200 OK
curl -i -X POST \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data "List-Unsubscribe=One-Click" \
  https://example.com/u/9f2c4a8e
# esperado: 200 OK, e o destinatário de fato removido da lista
Um endpoint conforme remove o destinatário com este POST só — sem mais cliques.

O teste deve confirmar duas coisas: que o endpoint devolve 200 e que o destinatário é genuinamente removido da lista pretendida, sem login, cadeia de redirecionamentos nem página de confirmação no caminho. Se qualquer uma dessas aparecer, você tem um link que funciona mas não um clique da RFC 8058, e os provedores o tratarão como descumprimento.

Armadilhas

Os erros que quebram o um clique em silêncio

A maioria passa por um olhar casual na sua própria caixa e só vem à luz como reclamações crescentes ou rejeições repentinas.

ErroPor que quebra
Descadastrar em GETOs scanners de segurança e os pré-carregadores de links buscam as URLs e descadastram as pessoas em silêncio; um caso documentado descadastrou milhares de destinatários da Microsoft. Processe os descadastros só em POST.
Falta o cabeçalho List-Unsubscribe-PostEstá o link do rodapé ou um List-Unsubscribe simples, mas sem o cabeçalho -Post não há sinal de um clique, que é justo o que o Gmail e o Yahoo exigem.
Cabeçalho só com mailtoUm URI mailto por si só não garante o processamento instantâneo e automatizado; é preciso um URI HTTPS para o mecanismo POST.
URL não HTTPSOs endpoints HTTP puros não cumprem a RFC 8058; o Gmail os ignora.
Redirecionar para um centro de preferênciasO endpoint deve completar o descadastro e devolver 200; redirecionar para uma página de confirmação ou de preferências quebra o um clique e é lido como descumprimento.
Faltam os colchetes angularesA causa nº1 de «o cabeçalho está lá mas nada acontece» — a URL deve ficar dentro de <...>.
Cabeçalhos adicionados após a assinaturaO middleware ou uma rota posterior que injeta cabeçalhos após a assinatura DKIM os deixa sem assinatura, então os receptores podem ignorá-los. As múltiplas rotas de e-mail costumam diferir em silêncio.

O que deve ser levado mais a sério é o descadastro disparado em GET. Parece inofensivo em testes, porque um humano que aperta um link faz a coisa certa — mas em produção, os scanners e pré-visualizadores automáticos buscam as URLs dos cabeçalhos constantemente, e cada uma dessas requisições descadastra alguém em silêncio. Processar os descadastros só em POST não é um detalhe estético; é o problema concreto que a RFC 8058 foi escrita para resolver.

O fluxo

O que acontece quando alguém aperta Cancelar inscrição

O caminho de um clique, e onde as implementações comuns caem dele.

O fluxo POST de um clique
O destinatário apertabotão nativo de descadastrona interface da caixa O provedor faz POSTList-Unsubscribe=One-Clickao seu endpoint HTTPS O endpoint descadastradevolve 200 OKdentro de 48 horas · sem passos extra GET nunca deve disparar o descadastro — os scanners pré-carregam as URLs

Dois clientes ficam fora deste caminho limpo e precisam de tratamento. O Apple Mail usa o URI mailto e ignora o POST, então você também deve aceitar e-mails de descadastro recebidos; o webmail do Outlook pode bloquear um remetente para um usuário internamente sem nunca chamar o seu endpoint, então você segue recebendo reclamações que não consegue ver — por isso um link visível no corpo segue sendo a sua rede de segurança.

A janela de 48 horas e a supressão em tempo real

Os cabeçalhos são só metade da obrigação; honrar a requisição é a outra metade. Quando um destinatário aperta Cancelar inscrição, os provedores exigem que o descadastro seja processado dentro de 48 horas, e a própria orientação do Google empurra os remetentes a agir mais rápido quando podem. Essa janela soa generosa até você olhar como a maioria dos sistemas de envio de fato suprime: num trabalho em lote adiado que roda de noite, ou uma vez por dia, ou quando a próxima campanha é construída. Qualquer coisa mais lenta que o quase tempo real significa que as pessoas seguem recebendo e-mail após pedir explicitamente que você pare.

Esse atraso é precisamente de onde vêm as reclamações. Um destinatário que se descadastra e depois recebe outra mensagem na manhã seguinte não supõe que o seu trabalho em lote está atrasado — supõe que você o ignorou, e parte para Marcar como spam, que é justo o resultado que todo o mecanismo existe para evitar. A solução é tratar o POST de descadastro como um evento que atualiza a supressão de imediato, antes que o próximo envio possa pegar o endereço de volta, em vez de como uma linha a reconciliar depois.

A idempotência também importa aqui, e é fácil de passar batido. Os provedores e os scanners podem enviar o mesmo POST mais de uma vez, então o seu endpoint deve tratar um descadastro repetido como uma operação nula que ainda devolve 200, não como um erro e com certeza não como algo que pudesse ativar uma reinscrição. Um endpoint que descadastra limpo no primeiro POST mas falha no segundo é um bug sutil que se manifesta como tickets de suporte confusos e a eventual pessoa que afirma que foi reinscrita contra a vontade.

Como o um clique se liga à sua taxa de reclamações e à lei

O um clique não é uma caixa isolada a marcar; ele se assenta diretamente sobre o limiar de taxa de reclamações que governa a sua entregabilidade. O Gmail e o Yahoo querem os remetentes em massa abaixo de uma taxa de reclamações de spam de 0,1% e tratam qualquer coisa acima de 0,3% como gatilho de filtragem. Em escala, isso é uma margem finíssima, e um descadastro sem atrito é uma das poucas alavancas que a move a seu favor: cada destinatário que sai limpo pelo cabeçalho é um destinatário que não apresentou uma reclamação. Uma implementação correta de um clique é, nesse sentido, gestão da taxa de reclamações com outro nome.

Ele também vive dentro de um marco legal que merece respeito por si mesmo. Um link de descadastro visível no corpo é obrigatório pela lei antispam independentemente do que o Gmail e o Yahoo peçam, e as sanções por errar no descadastro não são triviais — sob a CAN-SPAM nos Estados Unidos, as infrações são avaliadas por e-mail individual, não por campanha, o que transforma um fluxo de descadastro desleixado numa responsabilidade real em volume. O um clique baseado em cabeçalho e o link do rodapé exigido por lei são duas obrigações distintas que por acaso apontam na mesma direção.

O alentador é que aqui o cumprimento e a boa prática convergem por completo. Não há versão disto em que a escolha ótima para a entregabilidade e a escolha respeitosa com o destinatário divirjam: a mesma saída sem atrito que o mantém abaixo do limiar de reclamações é também a que respeita a pessoa que já não quer o seu e-mail. Esse alinhamento é raro o bastante em entregabilidade para ser nomeado — a maioria das alavancas implica um compromisso, e esta não.

Onde nós estamos

Hospedamos infraestrutura de envio, e nas plataformas que operamos os cabeçalhos conformes são parte da configuração em vez de uma reflexão tardia — um stack auto-hospedado de KumoMTA ou PowerMTA pode emitir um par List-Unsubscribe correto, assinado com DKIM, em cada mensagem promocional, e um endpoint POST limpo é uma pequena peça de cola. O ponto honesto, porém, é que os cabeçalhos são a parte fácil. O trabalho mais difícil e valioso é manter os fluxos separados, a supressão em tempo real e a lista limpa o bastante para que poucas pessoas queiram sair em primeiro lugar.

Então o nosso conselho é tratar o um clique como o mínimo e depois ir além: entregue os dois cabeçalhos e o endpoint POST esta semana, verifique-os sobre uma mensagem entregue, e dedique a energia poupada à higiene de lista e ao engajamento, que é onde a entregabilidade é de fato ganha ou perdida. Se você envia conosco, vamos garantir que os cabeçalhos sejam corretos e assinados; se você auto-hospeda ou usa um ESP, o mesmo padrão se aplica seja quem for que opere os servidores.

Perguntas

Respondidas com clareza

As perguntas que os times fazem antes de entregar o descadastro com um clique.

O link de descadastro do rodapé do meu e-mail não basta?

Não, não para o e-mail promocional em massa. O link do rodapé segue obrigatório pela lei antispam e pelos provedores, mas por si só não cumpre o requisito de um clique. O Gmail e o Yahoo buscam especificamente o cabeçalho List-Unsubscribe-Post, que permite à interface deles exibir um botão nativo de Cancelar inscrição ao lado do seu nome e completar o descadastro com um único POST. O link do rodapé e o um clique baseado em cabeçalho são complementares: mantenha ambos.

O que exatamente o List-Unsubscribe-Post precisa conter?

Exatamente o valor List-Unsubscribe=One-Click — nada mais. Essa string não é decorativa; é o sinal definido pela RFC 8058 que diz ao receptor que ele pode fazer um POST HTTPS para um descadastro direto. Acompanhe-a de um cabeçalho List-Unsubscribe que contenha ao menos um URI HTTPS dentro de colchetes angulares. É aqui que muitas configurações por outro lado corretas falham em silêncio: têm List-Unsubscribe mas omitem o cabeçalho -Post, então não há sinal de um clique algum.

O descadastro com um clique se aplica ao e-mail transacional?

Não. As redefinições de senha, recibos, notificações de envio e confirmações de reserva estão isentos — o requisito mira o e-mail promocional e de assinatura. Os provedores distinguem os dois em boa medida pelo conteúdo e pelo comportamento do destinatário mais que pela sua intenção, então o prático é separar os seus fluxos promocionais e aplicar os cabeçalhos ali, deixando em paz o e-mail genuinamente transacional.

Por que os scanners de links descadastraram as pessoas automaticamente?

Porque o endpoint descadastrava numa requisição GET. As ferramentas de segurança, o antivírus e as pré-visualizações de caixa buscam de forma rotineira as URLs dos cabeçalhos, e se o seu descadastro dispara em GET, essas requisições automáticas descadastram as pessoas em silêncio — um caso documentado descadastrou assim milhares de destinatários da Microsoft. A RFC 8058 existe precisamente para evitar isto: o descadastro deve ocorrer só em POST, nunca em GET. Um GET deve, no máximo, mostrar uma página informativa.

Em que o Apple Mail e o Outlook diferem aqui?

O Apple Mail exibe um banner de Cancelar inscrição que usa o URI mailto e ignora o POST HTTPS por completo, então convém incluir tanto um mailto quanto um URI HTTPS e estar pronto para processar e-mails de descadastro recebidos. O Outlook é mais delicado: o webmail dele pode bloquear o remetente para aquele usuário internamente sem nunca chamar o seu endpoint, então você nunca recebe o sinal e segue enviando — o que depois gera reclamações. A defesa é manter um link de descadastro visível no corpo como reserva junto aos cabeçalhos.

Como verifico que a minha implementação funciona de verdade?

Não confie em se o botão aparece na caixa — ele frequentemente não é exibido nos envios de teste mesmo quando tudo está correto, em parte porque os provedores pesam a reputação do remetente antes de exibi-lo. Em vez disso, envie uma mensagem real pela sua rota real de campanha e leia os cabeçalhos entregues em bruto para confirmar que ambos estão presentes e assinados com DKIM. Depois faça POST ao endpoint com curl, enviando List-Unsubscribe=One-Click, e confirme que o destinatário é removido de verdade sem login, redirecionamento ou página de confirmação.

Quer o um clique bem feito desde o início?

Conte como você envia, e vamos garantir que o seu e-mail promocional carregue cabeçalhos de um clique corretos e assinados com DKIM — e um endpoint POST que descadastre as pessoas de forma limpa.