Pular para o conteúdo
Docs

Solução de problemas

Por que os meus e-mails são enviados duas vezes?

Descubra de onde vêm os e-mails duplicados e evite-os com o cabeçalho Idempotency-Key, que torna seguras as novas tentativas de requisições à API.

Atualizado em 1 de out. de 2026

Este artigo ajuda quando os destinatários recebem o mesmo e-mail duas ou mais vezes. O Emailit envia cada requisição aceita uma única vez, então duplicatas quase sempre significam que a requisição chegou ao Emailit mais de uma vez.

Sintomas

  • Um destinatário relata ter recebido dois e-mails idênticos.
  • Email APIEmails mostra dois ou mais e-mails com o mesmo destinatário e assunto, cada um com o próprio ID em_…, criados com segundos ou minutos de diferença.
  • Email APILogs mostra mais de uma requisição POST /v2/emails para a mesma mensagem.

Causa

Origens comuns de requisições repetidas:

  • Novas tentativas depois de um timeout. O seu cliente HTTP ou a sua fila de jobs deu timeout e tentou de novo, mas a primeira requisição já tinha sido aceita.
  • Filas de jobs com entrega pelo menos uma vez. Um worker caiu depois de enviar, mas antes de marcar o job como concluído, e o job foi executado de novo.
  • Envios disparados por webhooks. O seu endpoint envia um e-mail quando recebe um evento. Se ele respondeu devagar, o Emailit reenviou o webhook e o seu código enviou de novo.
  • Duas integrações. Por exemplo, um plugin SMTP do WordPress e a sua aplicação enviam a mesma notificação, ou uma automação e o seu código enviam um e-mail de boas-vindas.
  • Envios duplos de um formulário ou botão.

O Emailit já remove os endereços duplicados dentro de uma requisição, sem diferenciar maiúsculas de minúsculas, entre to, cc e bcc. Uma única requisição nunca envia duas vezes para a mesma pessoa.

Solução

  1. Encontre a origem. Em Email APIEmails, filtre pelo destinatário e compare as duplicatas. Confira a chave de API e os horários e depois associe-os às requisições em Email APILogs. Requisições de chaves diferentes geralmente indicam duas integrações. Requisições da mesma chave indicam novas tentativas.

  2. Adicione um cabeçalho Idempotency-Key. Gere uma chave uma vez por e-mail lógico, por exemplo a partir do ID do pedido ou do evento, e reutilize-a em todas as novas tentativas:

    Terminal
    curl https://api.emailit.com/v2/emails \
      -H "Authorization: Bearer $EMAILIT_API_KEY" \
      -H "Idempotency-Key: order-1042-receipt" \
      -H "Content-Type: application/json" \
      -d '{"from":"Acme <hello@acme.com>","to":"ada@example.com","subject":"Your receipt","html":"<p>Thanks!</p>"}'

    As chaves têm de 1 a 256 caracteres entre letras, dígitos, - e _ e valem dentro do seu workspace.

  3. Trate as respostas. Durante 24 horas, uma repetição com a mesma chave retorna a resposta original sem enviar nem cobrar de novo. Uma repetição que chega enquanto a primeira ainda está em andamento recebe 409 Idempotency key in progress: espere e tente de novo com a mesma chave. As requisições com falha não são guardadas, então você pode tentar de novo com a mesma chave.

  4. Elimine as duplicatas nos handlers de webhook. Guarde cada event_id processado e ignore os eventos que você já tratou.

  5. Remova a segunda integração. Garanta que apenas um sistema envie cada tipo de mensagem.

As chaves de idempotência funcionam em Enviar um e-mail e Encaminhar um e-mail. O SMTP não tem um equivalente, então elimine as duplicatas na sua aplicação antes de entregar os e-mails ao relay. Leia Idempotência para mais detalhes.

Ainda com problemas?

Fale com o suporte ou pergunte no Discord, informando os IDs de dois e-mails duplicados.

Esta página foi útil?

Obrigado pelo feedback.

Obrigado, lemos todas as mensagens.