Vai al contenuto
Docs

Guida

Passa da Resend a Emailit. Le API sono simili, quindi le modifiche sono poche. Fai corrispondere campi, impostazioni SMTP ed eventi webhook, verifica le firme e sposta i contatti.

Aggiornato il 1 ott 2026

Questa guida fa corrispondere concetti, chiamate API, webhook e template di Resend ai loro equivalenti in Emailit. Le due API hanno una struttura simile, quindi la maggior parte delle modifiche al codice è piccola. Leggi prima Passa a Emailit per l’ordine generale e per sapere come usare entrambi i provider in parallelo.

Concetti

Resend Emailit
Team Workspace. Ogni workspace ha i propri domini, chiavi, membri e crediti.
API key con accesso full o sending Chiave API: Full Access, oppure Sending Only facoltativamente limitata a un dominio
Domains Domini di invio
Audiences e contacts Contatti e liste
Broadcasts Campagne
Webhooks Webhook
Emails e logs Email APIEmails e Email APILogs
tags meta
Componenti React Email HTML che generi nel tuo codice, oppure template progettati nel pannello

Aggiorna le chiamate API

POST /emails di Resend diventa POST /v2/emails di Emailit, con quasi gli stessi campi. In Node.js:

Prima: Resend
import { Resend } from 'resend';

const resend = new Resend(process.env.RESEND_API_KEY);

await resend.emails.send({
  from: 'Acme <hello@acme.com>',
  to: ['ada@example.com'],
  subject: 'Your receipt',
  html: '<p>Thanks for your order.</p>',
});
Dopo: Emailit
import { Emailit } from '@emailit/node';

const emailit = new Emailit(process.env.EMAILIT_API_KEY);

await emailit.emails.send({
  from: 'Acme <hello@acme.com>',
  to: ['ada@example.com'],
  subject: 'Your receipt',
  html: '<p>Thanks for your order.</p>',
});
Resend Emailit
Authorization: Bearer re_… Authorization: Bearer secret_…
from, subject, html, text, headers Uguali
to, cc, bcc Uguali, fino a 50 ciascuno
reply_to (replyTo nell’SDK Node.js) reply_to
react (SDK Node.js) Non disponibile. Genera l’HTML dal componente e passa html.
attachments[] con filename e content o path attachments[] con filename e content in base64 o un url. content_type è obbligatorio con content.
tags: [{ "name": "…", "value": "…" }] meta: { "name": "value" }, restituito negli eventi webhook
scheduled_at scheduled_at (ISO 8601, timestamp Unix o inglese semplice)
Header Idempotency-Key Header Idempotency-Key, conservato per 24 ore
POST /emails/batch Non disponibile. Invia una richiesta per messaggio.
Risposta { "id": "…" } 200 con id (em_…), status: "accepted" e ids con un ID per destinatario

Ogni destinatario di una richiesta Emailit diventa un’email a sé, con il proprio ID. Quando invii a più destinatari, la mappa ids della risposta associa ogni indirizzo al suo ID. Emailit traccia anche aperture e clic per singola email con tracking: { "loads": true, "clicks": true }, quando il dominio ha un sottodominio di tracciamento verificato. Vedi Invia un’email.

React Email

Se crei le email con React Email, mantieni i tuoi componenti e generali tu prima dell’invio:

JSX
import { render } from '@react-email/render';
import Receipt from './emails/receipt';

const html = await render(<Receipt order={order} />);
const text = await render(<Receipt order={order} />, { plainText: true });

await emailit.emails.send({ from, to, subject, html, text });

Cambia le impostazioni SMTP

Impostazione Resend Emailit
Host smtp.resend.com smtp.emailit.com
Porta 587, 2587 o 25 (STARTTLS), 465 o 2465 (TLS) 587, 2587, 2525 o 25 (STARTTLS), 465 (TLS)
Nome utente resend emailit
Password La tua chiave API di Resend La tua chiave API di Emailit

Vedi Impostazioni SMTP.

Fai corrispondere gli eventi webhook

Evento Resend Evento Emailit
email.sent email.accepted (solo API)
email.delivered email.delivered
email.delivery_delayed email.attempted
email.bounced email.bounced
email.complained email.complained
email.opened email.loaded
email.clicked email.clicked
contact.created, contact.updated, contact.deleted Gli stessi nomi
domain.created, domain.updated, domain.deleted Gli stessi nomi

Cambia il formato della richiesta:

  • Resend invia un evento per richiesta. Emailit invia un array JSON di massimo 100 eventi, quindi esegui un ciclo sul corpo.
  • L’email si trova in data.object. Usa data.object.id, l’ID em_ della risposta all’invio, al posto di data.email_id. I tuoi valori meta sono in data.object.meta.
  • Le firme funzionano in modo diverso. Resend firma i webhook tramite Svix, con gli header svix-*. Emailit invia X-Emailit-Signature, l’HMAC-SHA256 in esadecimale di <timestamp>.<raw body>, calcolato con l’intero secret compreso il prefisso whsec_. Una libreria di verifica Svix non funziona, anche se entrambi i secret iniziano con whsec_. Vedi Verifica le firme dei webhook.
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);
}

Sposta soppressioni e contatti

  1. Raccogli tutti gli indirizzi che hanno generato bounce o segnalazioni mentre usavi Resend, dal pannello di Resend o dagli eventi salvati dai tuoi webhook.

  2. Crea un unico CSV con le colonne email,type,reason:

    CSV
    email,type,reason
    old-address@example.com,recipient,resend bounce
    angry@example.com,recipient,resend complaint

    Usa il tipo recipient per gli indirizzi che non devono mai ricevere email. Blocca gli invii via API, SMTP e campagne.

  3. In Email APISuppressions, seleziona Import e carica il file. Ogni file può avere fino a 10.000 righe e pesare al massimo 8 MB. I duplicati vengono saltati.

Se invii broadcast, esporta ogni audience di Resend in CSV e importala in Email MarketingContacts con Import, scegliendo la lista Emailit corrispondente. Mappa la colonna delle disiscrizioni, così chi ha rinunciato resta disiscritto. Vedi Importa ed esporta i contatti.

Sposta i template

Se generi le email nel codice, con React Email o con qualsiasi altro strumento, non cambia nulla: invia l’HTML. Se tieni i template in Resend, ricreali in Email MarketingTemplates o con l’API dei template, assegna a ciascuno un alias e invialo con template e variables.

I template di Emailit usano Temple: {{name}}, valori annidati come {{user.name}}, valori predefiniti come {{name|"there"}} e {{#if plan}}…{{else}}…{{/if}}. Non ci sono cicli, quindi genera gli elenchi nel tuo codice. Temple non applica mai l’escape all’HTML, quindi esegui l’escape dell’input degli utenti prima di passarlo.

Cambia i DNS

Aggiungi il dominio in Email APIDomains e pubblica i record di Emailit. Usano nomi propri (emailit._domainkey, emailit.<domain> e, facoltativamente, go e inbound), quindi non entrano in conflitto con i record di Resend, che di solito si trovano su resend._domainkey e su un sottodominio send. Mantieni il record DMARC. Dopo il passaggio, rimuovi i record di Resend. Vedi Record DNS.

Passaggi successivi

Questa pagina ti è stata utile?

Grazie del feedback.

Grazie, leggiamo ogni messaggio.