Pular para o conteúdo
Docs

Guia

Migre do SendGrid para o Emailit. Faça a correspondência de conceitos, campos da API, configurações SMTP e nomes do Event Webhook e depois traga as supressões, os dynamic templates e o DNS.

Atualizado em 1 de out. de 2026

Este guia mostra a correspondência entre os conceitos, as chamadas à API, os webhooks, as supressões e os templates do SendGrid e os equivalentes no Emailit. Leia antes Migrar para o Emailit para conhecer a ordem geral e saber como usar os dois provedores em paralelo.

Conceitos

SendGrid Emailit
Conta e subusers Conta e workspaces. Cada workspace tem os seus próprios domínios, chaves, membros e créditos.
Chave de API com permissões Chave de API: Full Access, ou Sending Only, que pode ser restrita a um domínio
Domain authentication Domínio de envio com registros SPF, DKIM e de return path
Link branding Subdomínio de rastreamento, um CNAME como go.acme.com
Single sender verification Não disponível. Todo endereço From deve estar em um domínio verificado.
Dynamic templates Templates com alias e versões, renderizados com o Temple
Event Webhook Webhooks
Inbound Parse Recebimento de e-mails
Suppressions Supressões
Unsubscribe groups Não disponível. Use listas de contatos e os links de descadastro das campanhas.
Marketing contacts e listas Contatos e listas de contatos
Single Sends Campanhas
Email Activity Email APIEmails e Email APILogs
Categories e custom args meta
IPs dedicados e IP pools IPs dedicados sob solicitação
Email address validation Verificação de e-mails

Atualizar as chamadas à API

O POST /v3/mail/send do SendGrid passa a ser POST /v2/emails. A requisição é mais simples: não há personalizations, e os endereços são strings simples.

Antes: 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>" }
    ]
  }'
Depois: 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 <email>"
personalizations[].to[] to, uma string ou um array de até 50 endereços
personalizations[].cc[], bcc[] cc, bcc
reply_to: { email } reply_to
subject subject
content[] com text/plain e text/html text e html
template_id template, um ID ou alias de template
personalizations[].dynamic_template_data variables
attachments[] com content, filename, type, content_id attachments[] com content, filename, content_type, content_id, ou uma url no lugar de content
headers headers
custom_args, categories meta, um objeto com valores em string devolvido nos eventos de webhook
send_at (horário Unix) scheduled_at, que aceita o mesmo horário Unix, ISO 8601 ou inglês simples
tracking_settings.open_tracking e click_tracking tracking: { "loads": true, "clicks": true }
asm (unsubscribe groups) Não disponível
202 Accepted com um cabeçalho X-Message-Id 200 com um corpo JSON: id, status: "accepted" e ids, com um ID por destinatário

Cada destinatário de uma requisição do Emailit vira um e-mail próprio, com o seu próprio ID. Para enviar variáveis diferentes para pessoas diferentes, o que o SendGrid faz com várias personalizations, envie uma requisição por destinatário. Adicione um cabeçalho Idempotency-Key para que as novas tentativas sejam seguras. Consulte Enviar um e-mail.

Mudar as configurações SMTP

Configuração SendGrid Emailit
Host smtp.sendgrid.net smtp.emailit.com
Porta 587, 465, 2525 ou 25 587 (STARTTLS), 465 (TLS), 2525, 2587 ou 25
Usuário apikey emailit
Senha A sua chave de API do SendGrid A sua chave de API do Emailit

O Emailit não lê o cabeçalho X-SMTPAPI. Remova-o e configure o rastreamento no domínio. Consulte Configurações SMTP.

Correspondência dos eventos de webhook

Evento do SendGrid Evento do Emailit
processed email.accepted (somente API)
deferred email.attempted
delivered email.delivered
bounce email.bounced
dropped email.suppressed, quando o destinatário está na lista de supressão
open email.loaded
click email.clicked
spamreport email.complained
unsubscribe, group_unsubscribe email.unsubscribed, somente para e-mails de campanha
POST do Inbound Parse email.received; depois, busque o conteúdo com GET /emails/{id}

Assim como o SendGrid, o Emailit envia um array JSON de eventos. Os campos são diferentes:

  • O nome do evento fica em type, e o e-mail fica em data.object. Use data.object.id (o ID em_ da resposta do envio) em vez de sg_message_id, e data.object.to em vez de email.
  • Os seus valores de meta voltam em data.object.meta.
  • O Emailit assina as requisições com HMAC-SHA256, em vez da chave pública ECDSA do SendGrid. Verifique X-Emailit-Signature com o seu segredo whsec_. Consulte Assinatura das requisições.
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);
}

Migrar as supressões

  1. No SendGrid, exporte Bounces, Spam Reports, Invalid Emails e Global Unsubscribes, pelas páginas de supressão ou pelos endpoints de API /v3/suppression/*. Os bloqueios (Blocks) costumam ser temporários, então você pode deixá-los de fora.

  2. Monte um único CSV com as colunas email,type,reason:

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

    Use o tipo recipient para endereços que nunca devem receber e-mails. Ele bloqueia envios pela API, por SMTP e de campanhas. Os tipos bounce, complaint e unsubscribe só bloqueiam campanhas.

  3. Em Email APISuppressions, selecione Import e envie o arquivo. Cada arquivo pode ter até 10.000 linhas e no máximo 8 MB, então divida as listas maiores. Os duplicados são ignorados.

Para quem se descadastrou de grupos de e-mail de marketing, importe essas pessoas como contatos marcados como unsubscribed, em vez de suprimi-las de todos os e-mails. Consulte Gerenciar supressões.

Migrar os templates

Exporte o HTML de cada dynamic template do SendGrid e depois importe-o em Email MarketingTemplates ou crie-o com a API de templates. Dê a cada template um alias, como receipt, e envie-o com "template": "receipt".

Os dois usam chaves duplas, mas o Temple é menor que o Handlebars:

SendGrid (Handlebars) Emailit (Temple)
{{first_name}} {{first_name}}
{{{html_block}}} {{html_block}}. O Temple nunca escapa HTML, então escape você mesmo o que vier dos usuários.
{{insert name "default=there"}} {{name|"there"}}
{{#if plan}}…{{else}}…{{/if}} Igual
{{#each items}}…{{/each}} Não suportado. Renderize a lista no seu código e passe-a como uma única variável.
{{#equals plan "pro"}}…{{/equals}} Não suportado. Passe um booleano como is_pro e use {{#if is_pro}}.

Consulte Temple e Importar e exportar templates.

Alterar o DNS

Adicione o seu domínio em Email APIDomains e publique os registros do Emailit. Eles usam nomes próprios (emailit._domainkey, emailit.<domain> e, opcionalmente, go e inbound), então não entram em conflito com os CNAMEs de domain authentication ou de link branding do SendGrid. Mantenha o seu registro DMARC. Depois da virada, remova os CNAMEs do SendGrid. Consulte Registros DNS.

Se você usava o Inbound Parse, aponte o registro MX do hostname de parse para o Emailit. Para manter o mesmo hostname, como parse.acme.com, defina o inbound_key do domínio como parse pela API. Consulte Configurar o recebimento de e-mails.

Próximos passos

Esta página foi útil?

Obrigado pelo feedback.

Obrigado, lemos todas as mensagens.