# 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.

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 API → Emails** 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 API → Logs** 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 API → Emails**, 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 API → Logs**. 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:

```bash
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](/pt/docs/api-reference/emails/send/) e [Encaminhar um e-mail](/pt/docs/api-reference/emails/forward/). 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](/pt/docs/email-api/idempotency/) para mais detalhes.

## Ainda com problemas?

[Fale com o suporte](/contact/) ou pergunte no [Discord](https://discord.emailit.com), informando os IDs de dois e-mails duplicados.

---
Fonte: https://emailit.com/pt/docs/kb/duplicate-emails-sent/
