---
title: "Migrer depuis SparkPost"
description: "Transférez votre intégration e-mail SparkPost vers Bird avec les correspondances pour les transmissions, SMTP, les templates, les suppressions et les webhooks, ainsi qu'une checklist de basculement."
canonical: "https://bird.com/fr-fr/documentation/guides/email/migrate/sparkpost"
---

# Migrer depuis SparkPost

Utilisez ce guide pour transférer l'envoi d'e-mails sortants de SparkPost vers Bird. Suivez la [checklist de migration principale](/docs/guides/email/migrate), en utilisant les correspondances ci-dessous pour votre intégration HTTP ou SMTP.

## Avant de commencer

Vous devez avoir accès à votre compte SparkPost et à vos sous-comptes, au DNS du domaine d'envoi, à la configuration de l'application et au gestionnaire de webhooks. Préparez un [espace de travail Bird](/docs/guides/workspaces) et une [clé API](/docs/api/authentication) dans la [région](/docs/api/regions) de votre choix. L'import des désinscriptions nécessite également la permission d'écriture `preferences` sur la clé.

Inventoriez les expéditeurs, templates, snippets, listes de destinataires, suppressions, envois programmés, pools d'IP et webhooks. Incluez les SDK, les adaptateurs mail de framework, les tâches en arrière-plan et les flux d'e-mails entrants. Notez les nouveaux identifiants de ressource au fur et à mesure de leur création ; les identifiants et identifiants d'authentification SparkPost ne fonctionnent pas dans Bird. Utilisez les [SDK Bird](/docs/sdks) pour remplacer un client SparkPost, et vérifiez ses réessais, délais d'attente et pagination.

Si vous utilisez les [sous-comptes SparkPost](https://developers.sparkpost.com/api/subaccounts/), [contactez-nous](/help/support) avant de choisir l'organisation de vos espaces de travail. Confirmez les espaces de travail disponibles, les permissions, les ressources partagées et le workflow de provisionnement des tenants. Une clé API d'espace de travail ne peut pas changer de tenant avec `X-MSYS-SUBACCOUNT`. Conservez les tenants suspendus et les restrictions d'envoi spécifiques à chaque tenant pendant la migration.

Vérifiez que vos [quotas de plan](/docs/guides/billing-and-usage) Bird et vos [limites de débit](/docs/guides/rate-limits) couvrent votre volume d'envoi, le nombre de ressources et le trafic de pointe.

Enregistrez vos [domaines d'envoi](/docs/guides/email/sending-domains) tôt. Conservez le DNS SparkPost fonctionnel et choisissez des noms d'hôte distincts pour le return-path et le tracking si nécessaire. Si l'enregistrement signale un conflit de propriété, [contactez le support](/help/support) avant de supprimer un domaine actif.

**IP dédiées :** [Contactez-nous](/help/support) ou votre équipe de compte avant de migrer. Demandez-nous de confirmer si vos IP SparkPost existantes peuvent être transférées vers Bird et convenez de la configuration du pool, du calendrier et de tout warmup nécessaire. Incluez la région de votre compte, les adresses IP, les noms de pool et le volume d'envoi. Gardez vos IP actuelles actives jusqu'à ce que le plan de migration soit confirmé.

Confirmez la [sélection du pool](/docs/guides/email/dedicated-ips-and-pools#select-a-pool-at-send-time) et les listes d'autorisation d'IP ou de noms d'hôte des destinataires avant le basculement. L'achat d'une IP ne modifie pas le pool par défaut. Les IP nouvellement achetées peuvent envoyer le surplus via l'infrastructure partagée pendant le [warmup](/docs/guides/email/ip-warmup), ce qui compte si les destinataires n'acceptent le courrier que depuis des IP spécifiques.

## Transmettez ceci à votre agent

Collez ceci dans votre agent de codage dans le dépôt de votre application :

```text
Help me migrate my SparkPost email integration to Bird.
1. Use an existing Bird MCP connection or signed-in CLI. Otherwise follow https://bird.com/docs/ai/set-up-your-agent.md. Append .md to Bird docs URLs to read Markdown.
2. Read https://bird.com/docs/guides/email/migrate/sparkpost.md and https://bird.com/docs/guides/email/migrate.md. Make a read-only inventory of my SparkPost call sites, SDKs, resource IDs, configured URLs, sending domains, and scheduled jobs before editing. Never print API keys.
3. Propose workspace and region mappings. If subaccounts, dedicated IPs, or domain ownership conflicts need a migration plan, use the available Bird tools to open a human email support ticket and return its ID. For CLI usage, read https://bird.com/docs/cli/reference/support-tickets-create.md. Wait for the agreed plan before moving those resources.
4. Follow https://bird.com/docs/guides/email/sending-domains.md; preserve working DNS and show me proposed records. Ask before DNS changes or paid provisioning.
5. Port sending, templates, and webhooks using this guide. Preserve recipient privacy, personalization, and categories. Export suppressions with scope and type; show me the handling before importing or changing preferences.
6. Test using https://bird.com/docs/guides/email/testing-sandbox.md. Show me results and unresolved differences, including tracking, signatures, and correlation.
7. Ask for explicit approval before production cutover. Keep a rollback path; get separate approval before retiring SparkPost resources or credentials.
```

## Faire correspondre l'appel d'envoi

Remplacez `POST /api/v1/transmissions` par [`POST /v1/email/messages`](/docs/api/reference/create-email-message), ou par [`POST /v1/email/batches`](/docs/api/reference/create-email-message-batch) pour les messages indépendants. La [vue d'ensemble API de SparkPost](https://developers.sparkpost.com/api/) liste ses hôtes régionaux et son authentification. Bird utilise `https://us1.platform.bird.com` ou `https://eu1.platform.bird.com`, selon la région de votre clé API, avec `Authorization: Bearer $BIRD_API_KEY`.

Une transmission SparkPost peut générer des e-mails distincts et personnalisés pour ses destinataires. Bird partage le contenu et les paramètres entre les destinataires d'un même envoi. Utilisez un message séparé pour chaque personnalisation, éventuellement regroupé dans un [lot](/docs/guides/email/sending-bulk). Les envois ne comportant que des destinataires To restent adressés individuellement ; vérifiez les en-têtes visibles lorsque vous ajoutez des copies Cc/Bcc.

Faites correspondre les [champs de transmission SparkPost](https://developers.sparkpost.com/api/transmissions/) :

| SparkPost                                         | Migration Bird                                                                                                                                                                          |
| ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `content.from`, `subject`, `html`, `text`         | Champs de premier niveau portant les mêmes noms                                                                                                                                         |
| `content.reply_to`                                | Tableau `reply_to`                                                                                                                                                                      |
| `recipients[].address`                            | Un message par destinataire personnalisé                                                                                                                                                |
| `address.header_to`, `content.headers.CC`         | Reconstruire les groupes `to` / `cc` / `bcc` ; voir la note sur l'adressage ci-dessous                                                                                                  |
| `content.headers`                                 | `headers` ; vérifier les noms réservés dans le guide d'envoi                                                                                                                            |
| `substitution_data`                               | `parameters` en ligne ou `template.parameters` stocké ; résoudre les substitutions et respecter la [limite de paramètres plus petite](/docs/guides/email/sending-email#content) de Bird |
| `content.template_id`                             | Nouveau template Bird `id` ou `slug` ; convertir et publier le contenu d'abord                                                                                                          |
| `metadata` de transmission/destinataire           | Fusionner dans `metadata`, les clés du destinataire l'emportent ; respecter la [limite de métadonnées plus petite](/docs/guides/email/sending-email#tags-vs-metadata) de Bird           |
| `tags` du destinataire, `campaign_id`             | Choisissez des tags `{ name, value }` ; aucun broadcast n'est créé                                                                                                                      |
| `options.transactional`                           | `category` explicite : `transactional` ou `marketing`                                                                                                                                   |
| `options.open_tracking`, `options.click_tracking` | `track_opens`, `track_clicks` ; résolvez les surcharges d'abord                                                                                                                         |
| `options.start_time`                              | `scheduled_at` ; le contenu du template est figé à l'acceptation ; voir les notes sur la planification ci-dessous                                                                       |
| `options.ip_pool`                                 | Bird `ip_pool_id` ; contactez-nous avant de migrer des IP dédiées                                                                                                                       |
| `content.attachments`                             | `type` → `content_type` (type MIME de base), `name` → `filename`, `data` → `content` en base64 ; validez les fichiers qui dépendent de paramètres MIME                                  |
| `content.inline_images`                           | Même correspondance de fichier, plus `name` → `content_id` ; voir ci-dessous                                                                                                            |
| `return_path`, `tracking_domain`                  | Configuration de domaine Bird ; voir ci-dessous                                                                                                                                         |
| `content.ab_test_id`                              | Choisissez des variantes et suivez les résultats dans votre application ; pas d'équivalent direct dans les champs d'envoi                                                               |

Pour les copies To/Cc/Bcc d'un même e-mail, reconstruisez le groupe de destinataires une seule fois. Les [adresses affichées](https://developers.sparkpost.com/api/recipient-lists/#header-address-object) de SparkPost peuvent différer des destinataires de livraison ; `to`, `cc` et `bcc` de Bird ajoutent chacun des destinataires de livraison. Copier un en-tête `CC` de SparkPost dans le `cc` de chaque message étendu peut envoyer des copies en double. Vérifiez les en-têtes visibles et le nombre de destinataires avant de basculer.

Vérifiez les [limites des champs d'envoi](/docs/guides/email/sending-email), la [planification](/docs/guides/email/scheduled-sending) et les [règles relatives aux pièces jointes](/docs/guides/email/attachments). Mettez à jour les identifiants d'images inline et les références `cid:` correspondantes pour respecter les règles de Bird. Configurez le [chemin de retour](/docs/guides/email/bounce-domain) et le [domaine de suivi](/docs/guides/email/tracking-domain) sur le domaine.

Les champs d'envoi HTTP de Bird n'incluent pas `content.email_rfc822`, `content.amp_html` ou `options.inline_css` de SparkPost. Reconstruisez les messages bruts avec les champs pris en charge, fournissez des alternatives HTML/texte pour AMP, et insérez le CSS en ligne avant de soumettre le HTML. SMTP analyse et reconstruit les parties de message prises en charge ; validez le MIME reçu si vous dépendez de sa structure exacte. Les paramètres MIME des pièces jointes tels que `method` pour les calendriers ou `charset` pour le texte ne sont pas préservés.

Pour les messages API planifiés, Bird fige la version du template, la langue et les paramètres au moment de l'acceptation de la requête. Les modifications ultérieures du template ne mettent pas à jour ce message. Pour le modifier, [annulez le message planifié](/docs/guides/email/scheduled-sending#canceling-a-scheduled-send) avant le début du traitement, puis soumettez un remplacement. Conservez un groupe d'identifiants de message Bird si vous devez remplacer l'annulation par campagne de SparkPost.

Définissez `BIRD_API_KEY` sur votre clé Bird. Cet exemple [sandbox](/docs/guides/email/testing-sandbox) ne nécessite pas de domaine vérifié et n'atteint aucune boîte de réception réelle. Pour une clé EU, utilisez `https://eu1.platform.bird.com` :

```bash
curl --fail-with-body https://us1.platform.bird.com/v1/email/messages \
  -H "Authorization: Bearer $BIRD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "onboarding@messagebird.dev",
    "to": ["delivered@messagebird.dev"],
    "subject": "Your receipt",
    "text": "Thanks for your order, {{ first_name }}.",
    "parameters": {"first_name": "Alex"},
    "category": "transactional",
    "metadata": {"order_id": "order_123"},
    "tags": [{"name": "mailstream", "value": "receipts"}]
  }'
```

Attendez `202 Accepted` et un identifiant de message `em_`. Enregistrez cet identifiant et suivez les résultats par destinataire via les [événements](/docs/guides/email/events). L'acceptation n'établit pas la livraison : un destinataire sur la liste de suppression peut être accepté puis rejeté par la suite. Mettez à jour l'analyse des réponses, la [gestion des erreurs](/docs/guides/errors) et les [réessais idempotents](/docs/guides/idempotency) avec l'appel d'envoi.

Pour un lot, lisez le tableau `data` et enregistrez l'ID de chaque message en regard de votre propre enregistrement d'envoi. Bird valide le lot avant de le mettre en file d'attente : un seul message invalide peut entraîner le rejet de la requête entière. Découpez les transmissions volumineuses pour respecter les [limites de lot](/docs/guides/email/sending-bulk) et suivez les règles de nouvel essai de Bird lorsqu'une réponse est ambiguë.

Attribuez à chaque requête ou segment de lot sa propre clé d'idempotence stable. La [fenêtre de rejeu](/docs/guides/idempotency) de Bird diffère de celle de SparkPost ; conservez les enregistrements d'envoi de votre application au-delà de cette fenêtre pour éviter les doublons lors du basculement ou d'un retour en arrière.

## Migrer les expéditeurs SMTP

Utilisez les [paramètres de connexion SMTP](/docs/guides/email/smtp) de Bird, le nom d'utilisateur `bird` et une clé API avec l'envoi d'e-mails activé. Vérifiez la région, TLS et la configuration de la clé.

Convertissez les [options `X-MSYS-API`](https://developers.sparkpost.com/api/smtp/) de SparkPost avant de supprimer l'en-tête. Définissez les valeurs par défaut de catégorie, tags, suivi et pool dans la [configuration SMTP](/docs/guides/email/smtp#what-comes-from-the-message-and-what-comes-from-the-keys-configuration) de Bird. Ces paramètres s'appliquent par clé API ; utilisez des clés configurées séparément ou HTTP lorsqu'ils varient entre les messages. Utilisez HTTP pour les métadonnées ou les paramètres de modèle par message.

Placez chaque destinataire de livraison dans l'enveloppe SMTP, les destinataires visibles dans les en-têtes MIME `To`/`Cc`, et les destinataires Bcc uniquement dans l'enveloppe. Inventoriez `X-MSYS-API.archive` séparément : les copies d'archive de SparkPost conservent les URL de suivi du destinataire d'origine, le Bcc ordinaire n'est donc pas équivalent. Validez un remplacement avant de basculer ce flux.

Copiez explicitement vos paramètres de suivi effectifs : la clé SMTP non configurée de Bird active le suivi des ouvertures et des clics, tandis que les valeurs par défaut de SparkPost varient selon le compte. Définissez aussi la catégorie : Bird SMTP est transactionnel par défaut et HTTP inline est marketing par défaut. Les expéditeurs de newsletters ont besoin de `marketing` sur l'un ou l'autre chemin.

Pour les [nouvelles tentatives SMTP](/docs/guides/email/smtp#retrying-safely), réutilisez la clé d'idempotence, l'enveloppe et les octets MIME exacts. Régénérer `Date`, `Message-ID` ou les frontières MIME modifie le contenu et peut empêcher une nouvelle tentative sûre.

## Convertir les modèles

Exportez les versions que vous envoyez réellement via l'[API Templates](https://developers.sparkpost.com/api/templates/) de SparkPost : listez avec `GET /api/v1/templates?draft=false`, puis récupérez le contenu avec `GET /api/v1/templates/{id}?draft=false`. Enregistrez les brouillons séparément si nécessaire. Incluez les modèles partagés avec les sous-comptes et les [snippets](https://developers.sparkpost.com/api/snippets/) référencés dans l'inventaire.

Le [langage de modèles](https://developers.sparkpost.com/api/template-language/) de SparkPost et la syntaxe Liquid de Bird diffèrent. Convertissez les conditions, boucles, valeurs par défaut et valeurs imbriquées. Résolvez les surcharges de destinataire et les métadonnées utilisées pour le rendu en paramètres explicites. Par exemple, `{{ if ... }}` devient `{% if ... %}`. La syntaxe `{{ name }}` partagée seule n'établit pas la compatibilité.

Développez les snippets avant de publier ; le Liquid de Bird ne prend pas en charge `include` ni `render`. Pour les modèles stockés, remplacez les références externes telles que `{{ user.name }}` par des paramètres plats tels que `{{ user_name }}`. Si vous insérez du HTML dynamique via des paramètres SparkPost, effectuez le rendu dans votre application et soumettez le corps complet sans `parameters` inline ; les valeurs de paramètres HTML ordinaires sont échappées.

Créez, prévisualisez et publiez un [modèle Bird](/docs/guides/email/templates), puis suivez [l'envoi avec un modèle](/docs/guides/email/sending-email#sending-with-a-template). Reportez l'expéditeur effectif, le Reply-To et les en-têtes personnalisés de SparkPost dans la requête d'envoi ; les modèles Bird fournissent le contenu.

Pour du Liquid en ligne, incluez `parameters`, même `{}` ; l'omettre laisse les jetons inchangés. Vérifiez les valeurs manquantes, l'échappement et les URL.

Remplacez les espaces réservés de désinscription par `{{ bird.unsubscribe_url }}`. Bird fournit les [en-têtes de désinscription marketing](/docs/guides/email/unsubscribe-links) ; supprimez les en-têtes personnalisés `List-Unsubscribe` et `List-Unsubscribe-Post` des envois marketing pour éviter un rejet `422`.

Les liens de désinscription de Bird excluent l'adresse de l'e-mail marketing dans tout l'espace de travail. Ces liens ne permettent pas de désinscriptions par liste. Vérifiez ce comportement si votre intégration SparkPost propose des abonnements distincts.

## Migrer les listes de destinataires

Exportez chaque [liste de destinataires stockée](https://developers.sparkpost.com/api/recipient-lists/) avec `GET /api/v1/recipient-lists/{id}?show_recipients=true` pour inclure l'appartenance et la personnalisation. Créez les [audiences](/docs/guides/email/audiences) de destination et enregistrez les [propriétés de contact](/docs/guides/email/contacts#contact-properties) avant d'importer. Examinez chaque résultat d'import et rapprochez les effectifs.

Les propriétés de contact appartiennent au contact dans toutes ses audiences. Si la même adresse possède des données de substitution différentes dans plusieurs listes SparkPost, rapprochez ces valeurs avant l'import pour éviter de les écraser. Les propriétés de contact Bird ont des types scalaires ; conservez la personnalisation par liste ou structurée dans votre application lorsqu'elle ne peut pas être représentée de manière fiable.

Utilisez les [broadcasts](/docs/guides/email/broadcasts) lorsqu'un modèle publié peut être alimenté par les propriétés de contact. L'appartenance à l'audience est résolue au démarrage de l'envoi, et les quotas d'envoi et de simultanéité des broadcasts s'appliquent. Utilisez des [messages par lot](/docs/guides/email/sending-bulk) indépendants pour des paramètres propres à la requête ou un instantané fixe de destinataires. Validez la gestion du consentement et des suppressions avant d'activer une liste migrée.

## Exporter les suppressions

Exportez avant tout envoi en production. Commencez par `GET /api/v1/suppression-list?cursor=initial&types=transactional,non_transactional,open_tracking`, puis suivez la pagination jusqu'au bout. Enregistrez l'intégralité des enregistrements, y compris le type, la source, l'identifiant de liste, le sous-compte et les horodatages. Utilisez `X-MSYS-SUBACCOUNT: 0` pour le compte principal et l'identifiant de chaque sous-compte pour sa propre liste. Consultez la documentation [Suppression List API](https://developers.sparkpost.com/api/suppression-list/) de SparkPost.

Classez les enregistrements par type, source et portée avant d'utiliser la boucle d'import du guide principal. L'endpoint [`POST /v1/email/suppressions`](/docs/api/reference/create-suppression) de Bird accepte un `email` et crée un blocage manuel à l'échelle de l'espace de travail sur les deux catégories :

- **Adresses bloquées pour la réception d'e-mails :** importez celles qui doivent être bloquées toutes catégories confondues. Conservez l'export d'origine pour le rapprochement ; les enregistrements importés portent le motif manuel de Bird.
- **Désinscriptions marketing à l'échelle du compte :** utilisez [`POST /v1/preferences`](/docs/api/reference/create-preference) avec `channel: "email"`, l'adresse dans `handle`, `status: "revoked"` et `coverage: "non_transactional"`. Définissez `source: "sparkpost-migration"` pour la réconciliation. Examinez d'abord les préférences Bird existantes et conservez les restrictions les plus strictes ; inspectez `applied` et la préférence renvoyée après chaque écriture.
- **Restrictions spécifiques à une liste ou limitées au transactionnel :** conservez leur portée dans l'éligibilité d'envoi de votre application. Les préférences e-mail de Bird s'appliquent à l'ensemble du canal et ne peuvent pas représenter ces portées. Une suppression manuelle peut aussi bloquer les réinitialisations de mot de passe. Maintenez le trafic concerné en pause jusqu'à ce que vous vérifiiez le remplacement.
- **Désinscriptions du suivi d'ouverture :** définissez `track_opens: false` pour le message indépendant, en plus de toute restriction d'envoi. Pour SMTP, utilisez une clé avec le suivi d'ouverture désactivé ou utilisez HTTP pour un contrôle par message.

La requête de préférence ci-dessus enregistre la restriction au moment de l'import. Conservez les horodatages originaux de SparkPost dans votre export et réconciliez tout consentement ultérieur avant l'écriture. Réconciliez les enregistrements importés et les écritures échouées, puis testez les deux catégories. Synchronisez les nouvelles désinscriptions et suppressions tant que les deux fournisseurs envoient. Continuez à appliquer les désinscriptions issues des e-mails SparkPost précédemment distribués vers Bird après la bascule. Consultez [Suppressions](/docs/guides/email/suppressions) pour la gestion native des rebonds et des plaintes.

## Convertir les événements webhook

SparkPost envoie des [événements webhook groupés](https://developers.sparkpost.com/api/webhooks/) dans des enveloppes `msys`. Bird distribue un événement par requête avec `type`, `timestamp` et `data`. [Enregistrez un endpoint Bird](/docs/guides/webhooks) avec des abonnements d'événements explicites et une vérification de signature. Maintenez le handler SparkPost actif pour son trafic restant.

| Événement SparkPost                 | Événement Bird             |
| ----------------------------------- | -------------------------- |
| `injection`                         | `email.processed`          |
| `delivery`                          | `email.delivered`          |
| `delay`                             | `email.deferred`           |
| `bounce`                            | `email.bounced`            |
| `out_of_band`                       | `email.out_of_band_bounce` |
| `spam_complaint`                    | `email.complained`         |
| Échecs côté envoi (voir ci-dessous) | `email.rejected`           |
| `open`, `initial_open`              | `email.opened`             |
| `click`                             | `email.clicked`            |
| `link_unsubscribe`                  | `email.unsubscribed`       |
| `list_unsubscribe`                  | `email.list_unsubscribed`  |

Les envois directs API et SMTP émettent `email.accepted` avant le traitement. Les broadcasts enregistrent l'acceptation dans les événements API et le journal d'e-mails, mais omettent ce webhook. Les événements `policy_rejection`, `generation_failure` et `generation_rejection` de SparkPost correspondent à `email.rejected` ; inspectez `rejection_reason`. Dédupliquez les ouvertures séparément lorsque vous comptez l'engagement unique.

Utilisez `data.email_id` et `data.recipient_id` pour la corrélation Bird, et transmettez vos propres identifiants dans `metadata`. Remplacez la gestion des batch ID de SparkPost par les [règles de déduplication et d'ordonnancement des webhooks](/docs/guides/webhooks) de Bird. Lisez les détails du rebond avant de décider si une adresse doit être sur la liste de suppression ; la [classification des rebonds](/docs/guides/email/events#bounce-classification) distingue les échecs d'adresse permanents des échecs temporaires ou liés aux politiques.

## Conserver l'historique des rapports

Exportez l'[historique des événements SparkPost](https://developers.sparkpost.com/api/events/) et les [rapports agrégés](https://developers.sparkpost.com/api/metrics/) dont vous avez besoin avant l'expiration de leurs fenêtres de rétention. Suivez la pagination des événements jusqu'au bout et conservez les identifiants du fournisseur, la portée compte/sous-compte, les horodatages et les filtres de rapport. Continuez à collecter les événements tardifs pendant la période de chevauchement, et conservez l'historique SparkPost dans une archive séparée.

Enregistrez une référence de base pour chaque flux d'envoi. Comparez les populations de destinataires et les fenêtres de rapport correspondantes, et vérifiez les [définitions des métriques](/docs/guides/email/tracking-and-metrics) : acceptation par le fournisseur, livraison par le serveur destinataire, engagement unique et ouvertures pré-récupérées sont des mesures différentes. Des noms de métriques identiques ne suffisent pas à établir des taux comparables.

## Migrer les e-mails entrants séparément

Si vous utilisez les [webhooks relais de SparkPost](https://developers.sparkpost.com/api/relay-webhooks/), suivez [Réception d'e-mails](/docs/guides/email/receiving-email) pour ce flux. Le webhook `email.received` de Bird fournit un `inbound_message_id` ; récupérez le corps, les pièces jointes ou le MIME brut via l'API au lieu d'attendre le message complet dans le webhook. Testez votre gestionnaire avec une adresse de transfert Bird, puis préparez la réception de domaine avant de modifier les enregistrements MX. Vérifiez le routage des réponses après le changement DNS et archivez le contenu dont vous avez besoin au-delà de la période de rétention de réception de Bird.

## Vérifier et basculer

1. Vérifiez la capacité d'envoi de chaque domaine. Exécutez le [test de fumée en bac à sable](/docs/guides/email/migrate#5-verify-in-the-sandbox-before-cutover) et les cas de plainte. Confirmez que les événements signés atteignent votre gestionnaire, correspondent au bon message et gèrent les livraisons en double. Les événements du bac à sable ne prouvent pas la livraison en boîte de réception, le rendu ou le suivi.
2. Envoyez depuis votre domaine vérifié vers des boîtes de réception réelles contrôlées. Vérifiez la personnalisation, la visibilité To/Cc/Bcc, les pièces jointes, l'authentification et le suivi. Testez un désabonnement : le marketing doit s'arrêter tandis que le courrier transactionnel éligible continue. Testez séparément que les blocages toutes catégories rejettent les deux. Gardez ces vérifications distinctes des résultats simulés en bac à sable.
3. Attribuez les envois programmés en attente à un seul fournisseur. Videz ou annulez l'original avant de le recréer ailleurs. Maintenez un enregistrement applicatif indiquant quel fournisseur a accepté chaque envoi logique, afin que les nouvelles tentatives ou le retour en arrière n'envoient pas un deuxième exemplaire.
4. Déplacez une portion contrôlée du trafic et surveillez les [métriques de livraison](/docs/guides/email/tracking-and-metrics) et le traitement des webhooks. Pour les IP dédiées, suivez le plan de migration convenu avec notre équipe, y compris tout [préchauffage](/docs/guides/email/ip-warmup). Augmentez le trafic une fois que les résultats observés répondent à vos exigences de livraison.
5. Si la validation échoue, suspendez le trafic Bird concerné et dirigez les nouveaux envois via le chemin SparkPost conservé avec les désinscriptions actuelles appliquées. Réconciliez les envois ambigus avant de les réessayer. Retirez les anciens identifiants, webhooks et DNS une fois les files d'attente et les événements tardifs pris en compte ; maintenez les anciens liens de suivi et de désabonnement fonctionnels pour le courrier précédemment livré.

Si l'authentification échoue, vérifiez le jeton bearer Bird et la région. Si les imports de préférences renvoient `403`, vérifiez la permission d'écriture `preferences` de la clé avant de continuer. Si la personnalisation s'affiche incorrectement, inspectez la conversion Liquid et les paramètres. Si le courrier transactionnel est rejeté de manière inattendue, vérifiez les suppressions manuelles importées. Utilisez le [journal d'e-mails](/docs/guides/email/email-log) et les détails des événements pour vérifier chaque correction.

## Étapes suivantes

- [Envoi d'e-mails](/docs/guides/email/sending-email) : champs du payload, personnalisation et résultats asynchrones
- [Modèles d'e-mails](/docs/guides/email/templates) : prévisualisation, publication et support Liquid
- [Suppressions](/docs/guides/email/suppressions) : raisons de suppression et gestion
- [Webhooks et événements](/docs/guides/webhooks) : signatures, réessais et rejeu

## Related resources

- [Getting started with email](/learn/email/getting-started-with-email) (video)
- [Email](/email-api) (product)
- [Build your first integration](/learn/paths/integration) (course)
- [Send your first email](/docs/get-started/send-your-first-email) (docs)

[Get an implementation brief](/learn/workspace?topic=email)
