# Perché le email vengono inviate due volte?

> Scopri da dove arrivano le email duplicate ed evitale con l’header Idempotency-Key, che rende sicuri i nuovi tentativi delle richieste API.

Questo articolo ti aiuta quando i destinatari ricevono la stessa email due o più volte. Emailit invia una sola volta ogni richiesta accettata, quindi i duplicati significano quasi sempre che la richiesta è arrivata a Emailit più di una volta.

## Sintomi

- Un destinatario segnala due email identiche.
- **Email API → Emails** mostra due o più email con lo stesso destinatario e lo stesso oggetto, ciascuna con il proprio ID `em_…`, create a pochi secondi o minuti di distanza.
- **Email API → Logs** mostra più di una richiesta `POST /v2/emails` per lo stesso messaggio.

## Causa

Le origini più comuni delle richieste ripetute:

- **Nuovi tentativi dopo un timeout.** Il client HTTP o la coda dei job è andata in timeout e ha ritentato, ma la prima richiesta era già stata accettata.
- **Code di job at-least-once.** Un worker si è bloccato dopo l’invio ma prima di contrassegnare il job come completato, quindi il job è stato eseguito di nuovo.
- **Invii avviati dai webhook.** Il tuo endpoint invia un’email quando riceve un evento. Se ha risposto lentamente, Emailit ha ritentato il webhook e il tuo codice ha inviato di nuovo.
- **Due integrazioni.** Ad esempio un plugin SMTP di WordPress e la tua app inviano entrambi la stessa notifica, oppure un’automazione e il tuo codice inviano entrambi un’email di benvenuto.
- **Doppi invii** da un modulo o da un pulsante.

Emailit rimuove già gli indirizzi duplicati all’interno di una richiesta, senza distinguere tra maiuscole e minuscole, tra `to`, `cc` e `bcc`. Una singola richiesta non invia mai due volte alla stessa persona.

## Soluzione

1. **Trova l’origine.** In **Email API → Emails**, filtra per destinatario e confronta i duplicati. Controlla la chiave API e i timestamp, poi trova le richieste corrispondenti in **Email API → Logs**. Richieste da chiavi diverse indicano di solito due integrazioni. Richieste dalla stessa chiave indicano nuovi tentativi.

2. **Aggiungi un header `Idempotency-Key`.** Genera una chiave una sola volta per ogni email logica, ad esempio dall’ID dell’ordine o dell’evento, e riusala a ogni nuovo tentativo:

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

   Le chiavi sono lunghe da 1 a 256 caratteri tra lettere, cifre, `-` e `_`, e valgono all’interno del workspace.

3. **Gestisci le risposte.** Per 24 ore, una richiesta ripetuta con la stessa chiave restituisce la risposta originale senza inviare né addebitare di nuovo. Una richiesta ripetuta che arriva mentre la prima è ancora in corso riceve `409 Idempotency key in progress`: attendi e ritenta con la stessa chiave. Le richieste non riuscite non vengono memorizzate, quindi puoi ritentarle con la stessa chiave.

4. **Elimina i duplicati nei gestori dei webhook.** Memorizza ogni `event_id` che elabori e salta gli eventi che hai già gestito.

5. **Rimuovi la seconda integrazione.** Assicurati che ogni tipo di messaggio venga inviato da un solo sistema.

Le chiavi di idempotenza funzionano con [Invia un’email](/it/docs/api-reference/emails/send/) e [Inoltra un’email](/it/docs/api-reference/emails/forward/). L’SMTP non ha un equivalente, quindi elimina i duplicati nella tua app prima di passare le email al relay. Leggi [Idempotenza](/it/docs/email-api/idempotency/) per i dettagli.

## Serve ancora aiuto?

[Contatta il supporto](/contact/) o chiedi su [Discord](https://discord.emailit.com) indicando gli ID di due email duplicate.

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