# Přechod ze SendGridu

> Přejděte ze SendGridu na Emailit. Namapujte pojmy, pole API, nastavení SMTP a názvy událostí Event Webhook a pak přeneste blokované adresy, dynamic templates a DNS.

Tento průvodce mapuje pojmy, volání API, webhooky, blokované adresy a šablony ze SendGridu 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

| SendGrid | Emailit |
| --- | --- |
| Účet a subusers | Účet a [workspace](/cs/docs/workspaces/). Každý workspace má vlastní domény, klíče, členy a kredity. |
| API key s oprávněními | [API klíč](/cs/docs/developers/api-keys/): **Full Access**, nebo **Sending Only**, volitelně omezený na jednu doménu |
| Domain authentication | [Odesílací doména](/cs/docs/domains/) se záznamy SPF, DKIM a return path |
| Link branding | [Subdoména pro měření](/cs/docs/tracking/), CNAME například `go.acme.com` |
| Single sender verification | Není dostupné. Každá adresa odesílatele musí být na ověřené doméně. |
| Dynamic templates | [Šablony](/cs/docs/templates/) s aliasem a verzemi vykreslované jazykem [Temple](/cs/docs/templates/temple/) |
| Event Webhook | [Webhooky](/cs/docs/webhooks/) |
| Inbound Parse | [Příchozí e-maily](/cs/docs/inbound/) |
| Suppressions | [Blokované adresy](/cs/docs/suppressions/) |
| Unsubscribe groups | Není dostupné. Použijte [seznamy kontaktů](/cs/docs/audiences/) a odkazy pro odhlášení v kampaních. |
| Marketing contacts a lists | [Kontakty](/cs/docs/contacts/) a [seznamy kontaktů](/cs/docs/audiences/) |
| Single Sends | [Kampaně](/cs/docs/campaigns/) |
| Email Activity | **Email API → Emails** a **Email API → Logs** |
| Categories a custom args | `meta` |
| Dedicated IPs a IP pools | [Dedikované IP adresy](/cs/docs/deliverability/dedicated-ips/) na vyžádání |
| Email address validation | [Ověřování e-mailů](/cs/docs/email-verification/) |

## Upravte volání API

Z `POST /v3/mail/send` v SendGridu se stane `POST /v2/emails`. Požadavek je plošší: nemá `personalizations` a adresy jsou prosté řetězce.

```bash title="Před: SendGrid"
curl https://api.sendgrid.com/v3/mail/send \
  -H "Authorization: Bearer $SENDGRID_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "personalizations": [{ "to": [{ "email": "ada@example.com" }] }],
    "from": { "email": "hello@acme.com", "name": "Acme" },
    "subject": "Your receipt",
    "content": [
      { "type": "text/plain", "value": "Thanks for your order." },
      { "type": "text/html", "value": "<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@acme.com>",
    "to": "ada@example.com",
    "subject": "Your receipt",
    "text": "Thanks for your order.",
    "html": "<p>Thanks for your order.</p>"
  }'
```

| SendGrid | Emailit |
| --- | --- |
| `Authorization: Bearer SG.…` | `Authorization: Bearer secret_…` |
| `from: { email, name }` | `from: "Name "` |
| `personalizations[].to[]` | `to`, řetězec nebo pole až 50 adres |
| `personalizations[].cc[]`, `bcc[]` | `cc`, `bcc` |
| `reply_to: { email }` | `reply_to` |
| `subject` | `subject` |
| `content[]` s `text/plain` a `text/html` | `text` a `html` |
| `template_id` | `template`, ID nebo alias šablony |
| `personalizations[].dynamic_template_data` | `variables` |
| `attachments[]` s `content`, `filename`, `type`, `content_id` | `attachments[]` s `content`, `filename`, `content_type`, `content_id`, nebo s `url` místo `content` |
| `headers` | `headers` |
| `custom_args`, `categories` | `meta`, objekt s řetězcovými hodnotami, který se vrací v událostech webhooků |
| `send_at` (unixový čas) | `scheduled_at`, které přijímá stejný unixový čas, ISO 8601 nebo běžnou angličtinu |
| `tracking_settings.open_tracking` a `click_tracking` | `tracking: { "loads": true, "clicks": true }` |
| `asm` (unsubscribe groups) | Není dostupné |
| `202 Accepted` s hlavičkou `X-Message-Id` | `200` s tělem JSON: `id`, `status: "accepted"` a `ids` s jedním ID pro každého příjemce |

Každý příjemce v požadavku Emailitu se stane samostatným e-mailem s vlastním ID. Pokud chcete různým lidem poslat různé proměnné, což SendGrid řeší několika `personalizations`, odešlete pro každého příjemce samostatný požadavek. Přidejte hlavičku `Idempotency-Key`, aby bylo opakování bezpečné. Viz [Odeslání e-mailu](/cs/docs/email-api/send-email/).

## Změňte nastavení SMTP

| Nastavení | SendGrid | Emailit |
| --- | --- | --- |
| Server | `smtp.sendgrid.net` | `smtp.emailit.com` |
| Port | `587`, `465`, `2525` nebo `25` | `587` (STARTTLS), `465` (TLS), `2525`, `2587` nebo `25` |
| Uživatelské jméno | `apikey` | `emailit` |
| Heslo | Váš API klíč SendGridu | Váš API klíč Emailitu |

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

## Namapujte události webhooků

| Událost SendGridu | Událost Emailitu |
| --- | --- |
| `processed` | `email.accepted` (jen API) |
| `deferred` | `email.attempted` |
| `delivered` | `email.delivered` |
| `bounce` | `email.bounced` |
| `dropped` | `email.suppressed`, když je příjemce na seznamu blokovaných adres |
| `open` | `email.loaded` |
| `click` | `email.clicked` |
| `spamreport` | `email.complained` |
| `unsubscribe`, `group_unsubscribe` | `email.unsubscribed`, jen u e-mailů z kampaní |
| POST z Inbound Parse | `email.received`, pak načtěte obsah přes [`GET /emails/{id}`](/cs/docs/api-reference/emails/get/) |

Stejně jako SendGrid posílá Emailit pole JSON s událostmi. Liší se pole:

- Název události je v `type` a e-mail v `data.object`. Místo `sg_message_id` používejte `data.object.id` (ID `em_` z odpovědi na odeslání) a místo `email` používejte `data.object.to`.
- Vaše hodnoty `meta` se vracejí v `data.object.meta`.
- Emailit podepisuje požadavky pomocí HMAC-SHA256 místo veřejného klíče ECDSA, který používá SendGrid. Ověřujte `X-Emailit-Signature` svým tajným klíčem `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. V SendGridu vyexportujte **Bounces**, **Spam Reports**, **Invalid Emails** a **Global Unsubscribes**, ze stránek suppressions nebo přes endpointy API `/v3/suppression/*`. Blocks jsou obvykle dočasné, takže je můžete vynechat.

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

```csv
email,type,reason
old-address@example.com,recipient,sendgrid bounce
angry@example.com,recipient,sendgrid spam report
```

   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, takže větší seznamy rozdělte. Duplicity se přeskočí.

Lidi odhlášené přes group unsubscribes z marketingových e-mailů naimportujte jako kontakty s nastaveným **unsubscribed**, místo abyste je blokovali pro veškerou poštu. Viz [Správa blokovaných adres](/cs/docs/suppressions/manage/).

## Přesuňte šablony

Vyexportujte HTML každé dynamic template ze SendGridu a pak ho naimportujte v **Email Marketing → Templates**, nebo šablonu vytvořte přes [API pro šablony](/cs/docs/api-reference/templates/create/). Dejte každé šabloně alias, například `receipt`, a odesílejte ji s `"template": "receipt"`.

Oba jazyky používají dvojité složené závorky, ale Temple je menší než Handlebars:

| SendGrid (Handlebars) | Emailit (Temple) |
| --- | --- |
| `{{first_name}}` | `{{first_name}}` |
| `{{{html_block}}}` | `{{html_block}}`. Temple nikdy neescapuje HTML, proto vstupy od uživatelů escapujte sami. |
| `{{insert name "default=there"}}` | `{{name\|"there"}}` |
| `{{#if plan}}…{{else}}…{{/if}}` | Stejně |
| `{{#each items}}…{{/each}}` | Nepodporuje se. Vykreslete seznam ve svém kódu a předejte ho jako jednu proměnnou. |
| `{{#equals plan "pro"}}…{{/equals}}` | Nepodporuje se. Předejte logickou hodnotu, například `is_pro`, a použijte `{{#if is_pro}}`. |

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

## Změňte DNS

Přidejte 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 s CNAME záznamy domain authentication ani link branding ze SendGridu. Záznam DMARC ponechte. Po přepnutí provozu CNAME záznamy SendGridu odstraňte. Viz [DNS záznamy odesílacích domén](/cs/docs/domains/dns-records/).

Pokud jste používali Inbound Parse, nasměrujte místo toho MX záznam svého názvu pro parse na Emailit. Pokud chcete ponechat stejný název, například `parse.acme.com`, nastavte přes API `inbound_key` domény na `parse`. Viz [Nastavení příchozích e-mailů](/cs/docs/inbound/set-up/).

## 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/sendgrid/
