Supressões
Proteção automática para a sua reputação de remetente.
A lista de supressão protege sua reputação de remetente — e sua capacidade de envio — garantindo que você nunca envie repetidamente para um endereço que teve hard bounce ou marcou você como spam.
Como endereços são suprimidos
- Hard bounce — o servidor de destino rejeitou o endereço permanentemente.
- Reclamação — o destinatário marcou uma mensagem como spam.
- Descadastro — o destinatário saiu de todo e-mail de marketing, pelo
header de um clique ou pela página de preferências hospedada. Além de marcar
o contato, a saída fica registrada aqui para sobreviver à exclusão e à
reimportação do contato; só um
PATCH /contacts/{id}explícito comunsubscribed: falsea remove. Diferente das outras origens, cobre apenas e-mail de marketing (veja abaixo). - Manual — você adicionou o endereço, no painel ou pela API.
Bounces e reclamações chegam como eventos do SES e suprimem o endereço automaticamente. Supressões são por time.
O que a supressão faz
- Envios transacionais (
POST /emailse o relay SMTP, semtopic_id): destinatários suprimidos por bounce, reclamação ou entrada manual são removidos deto/cc/bcc. Se todos os destinatários emtoestiverem suprimidos, o envio é rejeitado com422 all_recipients_suppressed(mensagemAll recipients are suppressed). Uma entrada de descadastro não se aplica aqui: quem saiu do marketing continua recebendo redefinições de senha, recibos e outras mensagens da conta — o mesmo significado que o Resend dá aunsubscribed("descadastrado de todos os Broadcasts"). - Envios com tópico (
POST /emailscomtopic_id) e broadcasts: toda entrada se aplica, descadastros incluídos, mais a saída do destinatário daquele tópico; broadcasts pulam esses contatos no fan-out.
Uma lista importada com origin: "unsubscribe" bloqueia, portanto, apenas
envios com tópico e broadcasts. Importe com manual para bloquear todo envio.
Toda mudança na lista publica um evento de webhook suppression.added ou
suppression.removed — veja Webhooks.
Revisando e removendo
O painel lista cada endereço suprimido com o motivo e a data. Você pode remover um endereço para permitir envios de novo — faça isso apenas quando souber que a causa foi corrigida (ex.: uma caixa que sempre existiu mas era rejeitada por um servidor mal configurado). A re-supressão é automática no próximo bounce ou reclamação.
A lista de supressão do próprio SES
Além desta lista por time, o Amazon SES mantém uma lista de supressão da
conta, por região, compartilhada por todos os times da instância. O
assistente de configuração a define para apenas bounces: uma caixa que deu
hard bounce está morta para todo mundo, então o SES pode recusá-la para a
conta inteira, mas uma denúncia de spam diz respeito ao e-mail de um remetente
e fica só na lista daquele time aqui. Um envio que o SES recusa por causa da
própria lista aparece como bounce permanente com o subtipo
OnAccountSuppressionList, e só o console do SES remove essa entrada.
API
Os endpoints /suppressions espelham a superfície suppressions do Resend,
então os métodos suppressions.* do SDK do Resend funcionam como estão. Cada
entrada é lida como { id, email, origin, source_id, created_at }, onde
origin é bounce, complaint, manual ou unsubscribe e source_id é o
email cujo bounce ou reclamação a criou.
GET /suppressions?origin=bounce— listagem com paginação por cursor, opcionalmente filtrada por origem.GET /suppressions/{id}eDELETE /suppressions/{id}— o segmento de caminho é o id da supressão ou o endereço de email.POST /suppressionscom{ "email": "...", "origin": "manual" }— bloqueia o endereço.originé opcional (bounce,complaint,manualouunsubscribe, padrãomanual) e permite que uma importação de outro provedor preserve o histórico de bounces e reclamações, ou que uma lista de opt-outs migrada mantenha seu motivo. Idempotente: um endereço já suprimido por qualquer motivo mantém sua entrada e sua origem, e o id existente é retornado.POST /suppressions/batch/addcom{ "emails": [...], "origin": "bounce" }ePOST /suppressions/batch/removecom{ "emails": [...] }ou{ "ids": [...] }— até 1000 entradas por chamada (o Resend limita a 100). O add aplica o únicooriginopcional a todas as linhas que cria e retorna um id por endereço distinto, na ordem de entrada; o remove lista só as linhas de fato removidas.
Três particularidades do MepMail: origin no add é aceito (o tipo do SDK
do Resend não tem esse campo, então envie por uma requisição crua),
origin: "unsubscribe" é um valor a mais que o Resend não tem (a união de
tipos do SDK dele não o inclui) e se comporta como um opt-out de um clique —
só uma nova inscrição explícita do contato o remove —, e um
endereço cujos dados pessoais foram apagados (LGPD/GDPR) continua bloqueando
envios mas some da listagem e das buscas por email — fica acessível só pelo
id, com "[erased]" como email, e suprimir o endereço de novo retorna esse
id sem restaurá-lo.
Por que isso importa
O SES acompanha taxas de bounce e reclamação e pausa remetentes que cruzam seus limites. A página de métricas do MepMail acompanha suas taxas contra esses limites, e o envio de broadcasts é bloqueado automaticamente quando uma taxa cruza a linha de pausa.
Na Nuvem, o volume de envio é regido pelos limites do seu plano. Auto-hospedado, os limites são as cotas e a reputação da sua própria conta AWS SES — cruzar os limites do SES pode pausar a conta inteira, que é exatamente do que a supressão protege você.