# Proč se moje e-maily odesílají dvakrát?

> Zjistěte, odkud se berou duplicitní e-maily, a zastavte je hlavičkou Idempotency-Key, díky které je opakování požadavků na API bezpečné.

Tento článek pomůže, když příjemci dostávají stejný e-mail dvakrát nebo vícekrát. Emailit odešle každý přijatý požadavek jednou, takže duplicity téměř vždy znamenají, že požadavek dorazil do Emailitu víckrát.

## Příznaky

- Příjemce hlásí dva stejné e-maily.
- **Email API → Emails** ukazuje dva nebo více e-mailů se stejným příjemcem a předmětem, každý s vlastním ID `em_…`, vytvořené v odstupu několika sekund nebo minut.
- **Email API → Logs** ukazuje pro stejnou zprávu víc než jeden požadavek `POST /v2/emails`.

## Příčina

Časté zdroje opakovaných požadavků:

- **Opakování po vypršení časového limitu.** Vašemu HTTP klientovi nebo frontě úloh vypršel časový limit a požadavek se zopakoval, ale první požadavek už byl přijatý.
- **Fronty úloh s doručením alespoň jednou.** Worker spadl po odeslání, ale dřív, než úlohu označil jako hotovou, takže se úloha spustila znovu.
- **Odesílání vyvolané webhooky.** Váš endpoint odešle e-mail, když přijme událost. Pokud odpověděl pomalu, Emailit webhook zopakoval a váš kód e-mail odeslal znovu.
- **Dvě integrace.** Například SMTP plugin pro WordPress i vaše aplikace odesílají stejné oznámení, nebo automatizace i váš kód odesílají uvítací e-mail.
- **Dvojité odeslání** formuláře nebo dvojí kliknutí na tlačítko.

Emailit už v rámci jednoho požadavku odstraňuje duplicitní adresy napříč `to`, `cc` a `bcc` bez ohledu na velikost písmen. Jeden požadavek nikdy neodešle stejnému člověku dvakrát.

## Řešení

1. **Najděte zdroj.** V **Email API → Emails** vyfiltrujte příjemce a porovnejte duplicity. Zkontrolujte API klíč a časová razítka a pak je spárujte s požadavky v **Email API → Logs**. Požadavky z různých klíčů obvykle ukazují na dvě integrace. Požadavky ze stejného klíče ukazují na opakování.

2. **Přidejte hlavičku `Idempotency-Key`.** Vygenerujte klíč jednou pro každý logický e-mail, například z ID objednávky nebo události, a při každém opakování ho použijte znovu:

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

   Klíče mají 1 až 256 znaků z písmen, číslic, `-` a `_` a platí v rámci vašeho workspace.

3. **Ošetřete odpovědi.** Po dobu 24 hodin vrátí opakovaný požadavek se stejným klíčem původní odpověď, aniž by se znovu odeslal nebo zaúčtoval. Opakování, které dorazí, zatímco první požadavek ještě běží, dostane `409 Idempotency key in progress`: počkejte a zkuste to znovu se stejným klíčem. Neúspěšné požadavky se neukládají, takže je můžete zopakovat se stejným klíčem.

4. **Odstraňte duplicity v obsluze webhooků.** Ukládejte každé zpracované `event_id` a události, které jste už zpracovali, přeskakujte.

5. **Odeberte druhou integraci.** Zajistěte, aby každý typ zprávy odesílal jen jeden systém.

Idempotenční klíče fungují u endpointů [Odeslání e-mailu](/cs/docs/api-reference/emails/send/) a [Přeposlání e-mailu](/cs/docs/api-reference/emails/forward/). SMTP nic podobného nemá, takže duplicity odstraňte ve své aplikaci, než poštu předáte relayi. Podrobnosti najdete na stránce [Idempotence](/cs/docs/email-api/idempotency/).

## Stále si nevíte rady?

[Napište podpoře](/contact/) nebo se zeptejte na [Discordu](https://discord.emailit.com) a uveďte ID dvou duplicitních e-mailů.

---
Zdroj: https://emailit.com/cs/docs/kb/duplicate-emails-sent/
