# Přechod z Mailgunu

> Přejděte z Mailgunu na Emailit. Namapujte domény, klíče a routes, převeďte volání API s daty formuláře na JSON a přesuňte SMTP, webhooky, blokované adresy a šablony.

Tento průvodce mapuje pojmy, volání API, webhooky, blokované adresy a šablony z Mailgunu na jejich ekvivalenty v Emailitu. Celkové pořadí a souběžný provoz obou poskytovatelů popisuje stránka [Přechod na Emailit](/cs/docs/migrate/), přečtěte si ji jako první.

## Principy

| Mailgun | Emailit |
| --- | --- |
| Účet a subaccounts | Účet a [workspace](/cs/docs/workspaces/). Každý workspace má vlastní domény, klíče, členy a kredity. |
| Doména s vlastní cestou API `/v3/<domain>/…` | [Odesílací doména](/cs/docs/domains/). Existuje jeden endpoint pro odesílání a Emailit doménu určí z adresy `from`. |
| Private API key | [API klíč](/cs/docs/developers/api-keys/) s oprávněním **Full Access** |
| Domain sending key | API klíč s oprávněním **Sending Only** omezený na jednu doménu |
| Přístupové údaje k SMTP pro každou doménu | Váš API klíč použitý jako heslo k SMTP |
| Šablony pro každou doménu, s verzemi | [Šablony](/cs/docs/templates/) pro celý workspace, s aliasem a verzemi |
| Webhooky pro každou doménu | [Webhooky](/cs/docs/webhooks/) pro celý workspace |
| Routes | [Příchozí e-maily](/cs/docs/inbound/) s webhookem `email.received`, nebo [automatizace](/cs/docs/inbound/forward-with-automations/) **Forward received email** |
| Suppressions pro každou doménu: Bounces, Unsubscribes, Complaints | Jeden [seznam blokovaných adres](/cs/docs/suppressions/) pro každý workspace |
| Mailing lists | [Seznamy kontaktů](/cs/docs/audiences/) |
| Tags a custom variables | `meta` |
| Logy a události | **Email API → Emails**, **Email API → Events** a **Email API → Logs** |
| Email validation | [Ověřování e-mailů](/cs/docs/email-verification/) |

## Upravte volání API

`POST /v3/<domain>/messages` v Mailgunu přijímá pole formuláře se základní autentizací. `POST /v2/emails` v Emailitu přijímá JSON s bearer tokenem:

```bash title="Před: Mailgun"
curl -s --user "api:$MAILGUN_API_KEY" \
  https://api.mailgun.net/v3/mg.acme.com/messages \
  -F from='Acme <hello@mg.acme.com>' \
  -F to='ada@example.com' \
  -F subject='Your receipt' \
  -F text='Thanks for your order.' \
  --form-string html='<p>Thanks for your order.</p>'
```

```bash title="Po: Emailit"
curl https://api.emailit.com/v2/emails \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "Acme <hello@mg.acme.com>",
    "to": "ada@example.com",
    "subject": "Your receipt",
    "text": "Thanks for your order.",
    "html": "<p>Thanks for your order.</p>"
  }'
```

| Mailgun | Emailit |
| --- | --- |
| Základní autentizace `api:<key>` | `Authorization: Bearer secret_…` |
| Pole `multipart/form-data` | Tělo JSON |
| `from`, `subject`, `text`, `html` | Stejné názvy |
| `to`, `cc`, `bcc` (opakované nebo oddělené čárkou) | `to`, `cc`, `bcc` jako řetězec nebo pole, každé až 50 adres |
| `h:Reply-To` | `reply_to` |
| `h:X-My-Header` | `headers: { "X-My-Header": "…" }` |
| `v:order-id`, `h:X-Mailgun-Variables` | `meta: { "order-id": "…" }`, vrací se v událostech webhooků |
| `template` a `t:variables` | `template` (ID nebo alias) a `variables` |
| `attachment`, `inline` (nahrávání souborů) | `attachments[]` s `content` v base64 nebo s `url` a k tomu `content_type`. U vložených obrázků přidejte `content_id`. |
| `o:deliverytime` (datum podle RFC 2822) | `scheduled_at` (ISO 8601, unixový čas nebo běžná angličtina) |
| `o:tracking`, `o:tracking-opens`, `o:tracking-clicks` | `tracking: { "loads": true, "clicks": true }` |
| `o:tag` | `meta` |
| `o:testmode` | Není dostupné |
| `recipient-variables` (dávkové odesílání) | Není dostupné. Pro každého příjemce odešlete samostatný požadavek s vlastními `variables`. |
| Odpověď `{ "id": "<…>", "message": "Queued. Thank you." }` | `200` s `id` (`em_…`), `message_id`, `status: "accepted"` a `ids` pro jednotlivé příjemce |

Pokud jste odesílali ze subdomény, například `mg.acme.com`, přidejte do Emailitu přesně tuto subdoménu. Subdomény se ověřují odděleně od nadřazené domény. Hostitelé API Mailgunu pro EU i USA odpovídají jedinému endpointu Emailitu. Viz [Odeslání e-mailu](/cs/docs/email-api/send-email/).

## Změňte nastavení SMTP

| Nastavení | Mailgun | Emailit |
| --- | --- | --- |
| Server | `smtp.mailgun.org` nebo server pro EU | `smtp.emailit.com` |
| Port | `587`, `465`, `2525` nebo `25` | `587` (STARTTLS), `465` (TLS), `2525`, `2587` nebo `25` |
| Uživatelské jméno | Vaše přihlašovací jméno SMTP, například `postmaster@mg.acme.com` | `emailit` |
| Heslo | Vaše heslo SMTP | Váš API klíč Emailitu |

Emailit nečte hlavičky `X-Mailgun-*`. Odstraňte je a měření místo toho nastavte na doméně. Viz [Nastavení SMTP](/cs/docs/smtp/settings/).

## Namapujte události webhooků

| Událost Mailgunu | Událost Emailitu |
| --- | --- |
| `accepted` | `email.accepted` (jen API) |
| `delivered` | `email.delivered` |
| `failed` se závažností `temporary` | `email.attempted` |
| `failed` se závažností `permanent` | `email.bounced` |
| `opened` | `email.loaded` |
| `clicked` | `email.clicked` |
| `complained` | `email.complained` |
| `unsubscribed` | `email.unsubscribed`, jen u e-mailů z kampaní |
| Route, která přeposílá na URL | `email.received`, pak načtěte obsah přes [`GET /emails/{id}`](/cs/docs/api-reference/emails/get/) |

Mění se formát požadavku:

- Mailgun posílá jednu událost na požadavek s podrobnostmi v `event-data`. Emailit posílá pole JSON s až 100 událostmi. Procházejte pole ve smyčce.
- Název události je v `type` a e-mail v `data.object`. K přiřazení událostí ke zprávám používejte `data.object.id`, ID `em_` z odpovědi na odeslání. Vaše hodnoty `meta` jsou v `data.object.meta`.
- Mailgun podepisuje časové razítko a token uvnitř těla. Emailit podepisuje celé surové tělo: ověřujte `X-Emailit-Signature` vůči `X-Emailit-Timestamp` a vašemu tajnému klíči `whsec_`. Viz [Podpis požadavku](/cs/docs/webhooks/request-signature/).

```javascript
for (const event of req.body) {
  const email = event.data.object;
  if (event.type === 'email.bounced') markBounced(email.to, email.id);
  if (event.type === 'email.complained') unsubscribe(email.to);
}
```

## Přesuňte blokované adresy

1. Vyexportujte seznamy **Bounces**, **Complaints** a **Unsubscribes** každé domény v Mailgunu, ze které odesíláte, v ovládacím panelu nebo přes API pro suppressions (`/v3/<domain>/bounces`, `/complaints` a `/unsubscribes`).

2. Sestavte jedno CSV se sloupci `email,type,reason`:

```csv
email,type,reason
old-address@example.com,recipient,mailgun bounce
angry@example.com,recipient,mailgun complaint
```

   Pro adresy, které nikdy nesmí dostat e-mail, použijte typ `recipient`. Blokuje odeslání přes API, SMTP i kampaně. Typy `bounce`, `complaint` a `unsubscribe` zastavují jen kampaně.

3. V **Email API → Suppressions** vyberte **Import** a nahrajte soubor. Každý soubor může mít až 10 000 řádků a nejvýše 8 MB. Duplicity se přeskočí.

Emailit má jeden seznam blokovaných adres pro každý workspace, takže adresy ze všech vašich domén v Mailgunu půjdou do stejného seznamu. Seznam povolených adres (allowlist) neexistuje. Viz [Správa blokovaných adres](/cs/docs/suppressions/manage/).

## Přesuňte šablony

Zkopírujte HTML každé šablony z Mailgunu a pak ho naimportujte v **Email Marketing → Templates**, nebo šablonu vytvořte přes [API pro šablony](/cs/docs/api-reference/templates/create/). Dejte jí alias a odesílejte ji s `"template": "<alias>"` a `variables`.

Šablony Mailgunu používají Handlebars. Temple pokrývá běžné části:

| Mailgun (Handlebars) | Emailit (Temple) |
| --- | --- |
| `{{first_name}}` | `{{first_name}}` |
| `{{{html_block}}}` | `{{html_block}}`. Temple nikdy neescapuje HTML, proto vstupy od uživatelů escapujte sami. |
| `{{#if plan}}…{{else}}…{{/if}}` | Stejně |
| `{{#unless plan}}…{{/unless}}` | `{{#if plan}}{{else}}…{{/if}}` |
| `{{#each items}}…{{/each}}` | Nepodporuje se. Vykreslete seznam ve svém kódu a předejte ho jako jednu proměnnou. |
| `{{#equal plan "pro"}}…{{/equal}}` | Nepodporuje se. Předejte logickou hodnotu, například `is_pro`, a použijte `{{#if is_pro}}`. |
| Bez vestavěné výchozí hodnoty | `{{first_name\|"there"}}` přidá náhradní hodnotu |

Viz [Temple](/cs/docs/templates/temple/) a [Import a export šablon](/cs/docs/templates/import-export/).

## Změňte DNS

Přidejte každou doménu v **Email API → Domains** a publikujte záznamy Emailitu. Používají vlastní názvy (`emailit._domainkey`, `emailit.<domain>` a volitelně `go` a `inbound`), takže nejsou v konfliktu se záznamem DKIM Mailgunu ani s jeho CNAME záznamem pro měření `email.<domain>`. Kvůli Emailitu nemusíte měnit záznam SPF hlavní domény. Záznam DMARC ponechte. Viz [DNS záznamy odesílacích domén](/cs/docs/domains/dns-records/).

Po přepnutí provozu odstraňte záznamy DKIM a měření Mailgunu a ze záznamu SPF odeberte `include:mailgun.org`. Pokud přijímáte poštu přes routes v Mailgunu, ponechte jeho MX záznamy, dokud tento provoz nepřesunete na [příchozí poštu Emailitu](/cs/docs/inbound/set-up/), která přijímá na subdoméně, například `inbound.acme.com`.

## Další kroky

- [Kontrolní seznam před ostrým provozem](/cs/docs/get-started/go-live/)
- [Nastavení webhooku](/cs/docs/webhooks/set-up/)
- [Prioritní migrace](/cs/docs/programs/priority-migration/): nechte inženýry Emailitu provést přechod s vámi

---
Zdroj: https://emailit.com/cs/docs/migrate/mailgun/
