Solución de problemas
¿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 APIEmails 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 APILogs muestra más de una petición
POST /v2/emailspara 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
-
Encuentra el origen. En Email APIEmails, 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 APILogs. Las peticiones desde claves distintas suelen indicar dos integraciones. Las peticiones desde la misma clave indican reintentos.
-
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: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. -
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. -
Elimina duplicados en los gestores de webhooks. Guarda cada
event_idque procesas y omite los eventos que ya hayas gestionado. -
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 y Reenviar un email. SMTP no tiene equivalente, así que elimina los duplicados en tu aplicación antes de pasar el correo al relay. Lee Idempotencia para conocer los detalles.
¿Sigues teniendo problemas?
Contacta con soporte o pregunta en Discord indicando los ID de dos emails duplicados.