Aller au contenu
Docs

Guide

Passez de Resend à Emailit. Les API sont proches, les changements sont donc limités. Faites correspondre les champs, les paramètres SMTP et les événements webhook, vérifiez les signatures et transférez les contacts.

Mis à jour le 1 oct. 2026

Ce guide fait correspondre les concepts, les appels API, les webhooks et les modèles de Resend à leurs équivalents dans Emailit. Les deux API ont une structure similaire : la plupart des modifications de code sont donc limitées. Lisez d’abord Migrer vers Emailit pour l’ordre général et la façon de faire fonctionner les deux fournisseurs en parallèle.

Concepts

Resend Emailit
Équipe (Team) Espace de travail. Chaque espace de travail a ses propres domaines, clés, membres et crédits.
Clé API à accès complet ou d’envoi Clé API : Full Access, ou Sending Only, éventuellement restreinte à un domaine
Domaines Domaines d’envoi
Audiences et contacts Contacts et listes de contacts
Broadcasts Campagnes
Webhooks Webhooks
E-mails et logs Email APIEmails et Email APILogs
tags meta
Composants React Email Du HTML dont vous effectuez le rendu dans votre code, ou des modèles conçus dans le tableau de bord

Mettre à jour vos appels API

Le POST /emails de Resend devient le POST /v2/emails d’Emailit, avec presque les mêmes champs. En Node.js :

Before: 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>',
});
After: 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 Identiques
to, cc, bcc Identiques, 50 adresses au maximum pour chacun
reply_to (replyTo dans le SDK Node.js) reply_to
react (SDK Node.js) Non disponible. Effectuez le rendu du composant en HTML et transmettez html.
attachments[] avec filename et content ou path attachments[] avec filename et un content en base64 ou une url. content_type est obligatoire avec content.
tags: [{ "name": "…", "value": "…" }] meta: { "name": "value" }, renvoyé dans les événements webhook
scheduled_at scheduled_at (ISO 8601, horodatage Unix ou anglais courant)
En-tête Idempotency-Key En-tête Idempotency-Key, conservé 24 heures
POST /emails/batch Non disponible. Envoyez une requête par message.
Réponse { "id": "…" } 200 avec id (em_…), status: "accepted", et ids avec un ID par destinataire

Chaque destinataire d’une requête Emailit devient un e-mail distinct avec son propre ID. Quand vous envoyez à plusieurs destinataires, l’objet ids de la réponse associe chaque adresse à son ID. Emailit suit aussi les ouvertures et les clics par e-mail avec tracking: { "loads": true, "clicks": true }, dès que le domaine dispose d’un sous-domaine de suivi vérifié. Consultez Envoyer un e-mail.

React Email

Si vous construisez vos e-mails avec React Email, conservez vos composants et effectuez-en vous-même le rendu avant l’envoi :

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 });

Changer les paramètres SMTP

Paramètre Resend Emailit
Hôte smtp.resend.com smtp.emailit.com
Port 587, 2587 ou 25 (STARTTLS), 465 ou 2465 (TLS) 587, 2587, 2525 ou 25 (STARTTLS), 465 (TLS)
Nom d’utilisateur resend emailit
Mot de passe Votre clé API Resend Votre clé API Emailit

Consultez Paramètres SMTP.

Faire correspondre les événements webhook

Événement Resend Événement Emailit
email.sent email.accepted (API uniquement)
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 Les mêmes noms
domain.created, domain.updated, domain.deleted Les mêmes noms

Le format des requêtes change :

  • Resend envoie un événement par requête. Emailit envoie un tableau JSON de 100 événements au maximum : parcourez donc le corps avec une boucle.
  • L’e-mail se trouve dans data.object. Utilisez data.object.id, l’ID em_ de la réponse d’envoi, au lieu de data.email_id. Vos valeurs meta se trouvent dans data.object.meta.
  • Les signatures fonctionnent différemment. Resend signe les webhooks via Svix, avec des en-têtes svix-*. Emailit envoie X-Emailit-Signature, le HMAC-SHA256 en hexadécimal de <timestamp>.<raw body>, calculé avec le secret complet, préfixe whsec_ compris. Une bibliothèque de vérification Svix ne fonctionnera pas, même si les deux secrets commencent par whsec_. Consultez Signature des requêtes.
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);
}

Transférer les adresses bloquées et les contacts

  1. Rassemblez toutes les adresses qui ont rebondi ou porté plainte pendant que vous utilisiez Resend, depuis le tableau de bord de Resend ou à partir des événements enregistrés par vos webhooks.

  2. Constituez un seul CSV avec les colonnes email,type,reason :

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

    Utilisez le type recipient pour les adresses qui ne doivent jamais recevoir d’e-mail. Il bloque les envois par l’API, par SMTP et par les campagnes.

  3. Dans Email APISuppressions, sélectionnez Import et chargez le fichier. Chaque fichier peut contenir 10 000 lignes et peser 8 Mo au maximum. Les doublons sont ignorés.

Si vous envoyez des broadcasts, exportez chaque audience Resend en CSV et importez-la dans Email MarketingContacts avec Import, en choisissant la liste de contacts Emailit correspondante. Faites correspondre la colonne de désinscription pour que les personnes désinscrites le restent. Consultez Importer et exporter des contacts.

Transférer les modèles

Si vous effectuez le rendu de vos e-mails dans votre code, avec React Email ou autre chose, rien ne change : envoyez le HTML. Si vous conservez des modèles dans Resend, recréez-les dans Email MarketingTemplates ou avec l’API des modèles, donnez un alias à chacun et envoyez-les avec template et variables.

Les modèles Emailit utilisent Temple : {{name}}, des valeurs imbriquées comme {{user.name}}, des valeurs par défaut comme {{name|"there"}}, et {{#if plan}}…{{else}}…{{/if}}. Il n’y a pas de boucles : générez donc les listes dans votre code. Temple n’échappe jamais le HTML : échappez les saisies des utilisateurs avant de les transmettre.

Modifier le DNS

Ajoutez votre domaine dans Email APIDomains et publiez les enregistrements Emailit. Ils utilisent leurs propres noms (emailit._domainkey, emailit.<domain>, et éventuellement go et inbound) : ils n’entrent donc pas en conflit avec les enregistrements de Resend, qui se trouvent généralement sur resend._domainkey et un sous-domaine send. Conservez votre enregistrement DMARC. Après la bascule, supprimez les enregistrements Resend. Consultez Enregistrements DNS.

Étapes suivantes

Cette page vous a-t-elle été utile ?

Merci pour votre retour.

Merci, nous lisons chaque message.