# ¿Por qué se envían mis emails dos veces?

> Descubre de dónde vienen los emails duplicados y evítalos con la cabecera Idempotency-Key, que hace seguros los reintentos de las peticiones a la API.

Este artículo te ayuda cuando los destinatarios reciben el mismo email dos o más veces. Emailit envía una sola vez cada petición aceptada, así que los duplicados casi siempre significan que la petición llegó a Emailit más de una vez.

## Síntomas

- Un destinatario informa de dos emails idénticos.
- **Email API → Emails** muestra dos o más emails con el mismo destinatario y asunto, cada uno con su propio ID `em_…`, creados con segundos o minutos de diferencia.
- **Email API → Logs** muestra más de una petición `POST /v2/emails` para el mismo mensaje.

## Causa

Orígenes habituales de peticiones repetidas:

- **Reintentos tras un tiempo de espera agotado.** Tu cliente HTTP o tu cola de trabajos agotó el tiempo de espera y reintentó, pero la primera petición ya se había aceptado.
- **Colas de trabajos con entrega «al menos una vez».** Un worker falló después de enviar pero antes de marcar el trabajo como terminado, así que el trabajo se volvió a ejecutar.
- **Envíos disparados por webhooks.** Tu endpoint envía un email cuando recibe un evento. Si respondió despacio, Emailit reintentó el webhook y tu código volvió a enviar.
- **Dos integraciones.** Por ejemplo, un plugin SMTP de WordPress y tu aplicación envían la misma notificación, o una automatización y tu código envían el mismo email de bienvenida.
- **Envíos dobles** desde un formulario o un botón.

Emailit ya elimina las direcciones duplicadas dentro de una misma petición, sin distinguir mayúsculas y minúsculas, entre `to`, `cc` y `bcc`. Una sola petición nunca envía dos veces a la misma persona.

## Solución

1. **Encuentra el origen.** En **Email API → Emails**, filtra por el destinatario y compara los duplicados. Comprueba la clave de API y las marcas de tiempo, y después asócialas con las peticiones de **Email API → Logs**. Las peticiones desde claves distintas suelen indicar dos integraciones. Las peticiones desde la misma clave indican reintentos.

2. **Añade una cabecera `Idempotency-Key`.** Genera una clave una vez por cada email lógico, por ejemplo a partir del ID de tu pedido o de tu evento, y reutilízala en cada reintento:

```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>"}'
```

   Las claves tienen de 1 a 256 caracteres entre letras, dígitos, `-` y `_`, y su ámbito es tu espacio de trabajo.

3. **Gestiona las respuestas.** Durante 24 horas, una repetición con la misma clave devuelve la respuesta original sin volver a enviar ni a cobrar. Una repetición que llega mientras la primera aún se está procesando recibe `409 Idempotency key in progress`: espera y reintenta con la misma clave. Las peticiones fallidas no se guardan, así que puedes reintentarlas con la misma clave.

4. **Elimina duplicados en los gestores de webhooks.** Guarda cada `event_id` que procesas y omite los eventos que ya hayas gestionado.

5. **Quita la segunda integración.** Asegúrate de que solo un sistema envía cada tipo de mensaje.

Las claves de idempotencia funcionan en [Enviar un email](/es/docs/api-reference/emails/send/) y [Reenviar un email](/es/docs/api-reference/emails/forward/). SMTP no tiene equivalente, así que elimina los duplicados en tu aplicación antes de pasar el correo al relay. Lee [Idempotencia](/es/docs/email-api/idempotency/) para conocer los detalles.

## ¿Sigues teniendo problemas?

[Contacta con soporte](/contact/) o pregunta en [Discord](https://discord.emailit.com) indicando los ID de dos emails duplicados.

---
Fuente: https://emailit.com/es/docs/kb/duplicate-emails-sent/
