Pular para o conteúdo

Rejeições, reclamações e supressões

Tipo Significado Evento Resultado
Hard (permanente) O endereço não existe ou o domínio rejeita e-mails de forma permanente. email.bounced last_event passa a bounced; o endereço é adicionado à sua lista de supressão.
Soft (transitória) Um problema temporário, como uma caixa cheia ou uma queda de servidor. O SES continua tentando. email.delivery_delayed Nada é suprimido no início. Após 3 rejeições transitórias em e-mails diferentes em 30 dias, o endereço é adicionado à sua lista de supressão.

As rejeições permanentes incluem bounce.type: "Permanent" e um bounce.subType no payload do webhook.

Um endereço que continua gerando rejeições transitórias costuma estar abandonado, e os provedores de caixa de entrada contam as tentativas repetidas contra você. As rejeições transitórias causadas pela mensagem e não pelo endereço (mensagem grande demais, conteúdo ou anexo rejeitado) não contam para o limite; corrija a mensagem.

Uma reclamação acontece quando um destinatário marca o seu e-mail como spam e o provedor da caixa de entrada dele informa isso (um feedback loop). O SpacePost dispara email.complained, define last_event como complained e adiciona o destinatário à sua lista de supressão. As reclamações são o sinal negativo mais forte que existe: mantenha-as abaixo de 0,1%.

A lista de supressão é uma lista de não envio por equipe. Antes de cada envio, o SpacePost confere todos os destinatários (to, cc, bcc) contra ela:

  • Os destinatários suprimidos são removidos da mensagem e um evento email.suppressed é disparado.
  • Se não sobrar nenhum destinatário, nada é enviado e o last_event do e-mail passa a suppressed.
  • A cota é contada quando o e-mail é aceito, antes da verificação de supressão, então os destinatários suprimidos ainda contam para a sua cota mensal.

As entradas são adicionadas automaticamente em caso de rejeições permanentes, rejeições transitórias repetidas e reclamações, ou manualmente pela API. Cada entrada tem um reason (bounce, complaint, unsubscribe ou manual) e um detail legível, como Hard bounce (NoEmail) ou 3 soft bounces in 30 days (MailboxFull). O primeiro motivo registrado para um endereço é mantido: adicionar um endereço manualmente nunca sobrescreve uma rejeição ou uma reclamação.

suppressions.ts
import { SpacePost } from "@spacepost/node";
const spacepost = new SpacePost();
await spacepost.suppressions.create({ email: "do-not-mail@example.com" });
const { data } = await spacepost.suppressions.list({ limit: 100 });
for (const s of data?.data ?? []) console.log(s.email, s.reason);
await spacepost.suppressions.remove("do-not-mail@example.com"); // by email or id
Suppression
{
"object": "suppression",
"id": "0192e1c4-0000-7000-8000-0000000000d1",
"email": "nobody@example.com",
"reason": "bounce",
"detail": "Hard bounce (NoEmail)",
"created_at": "2026-10-23T14:02:12.000Z"
}

Domínios de destinatários que não recebem e-mails

Seção intitulada “Domínios de destinatários que não recebem e-mails”

Se o domínio de um destinatário não aceita e-mails de forma alguma (sem registros MX nem A), o SpacePost ignora esse destinatário em vez de tentar a entrega e dispara email.suppressed. Isso protege a sua taxa de rejeição. Veja Verificação da conta e limites de envio.

bounced@test.spacepost.dev, complained@test.spacepost.dev e (após três envios) softbounced@test.spacepost.dev criam entradas reais de supressão e contam para as suas taxas. Remova-as depois de testar. Veja Testes.