# Migrer depuis Amazon SES

> Passez d’Amazon SES à Emailit. Faites correspondre les identités, le bac à sable et les quotas, remplacez les appels SDK et les identifiants SMTP, et transformez les événements SNS en webhooks signés.

Ce guide fait correspondre les concepts, les appels API, les notifications d’événements, les adresses bloquées et les modèles d’Amazon SES à leurs équivalents dans Emailit. Lisez d’abord [Migrer vers Emailit](/fr/docs/migrate/) pour l’ordre général et la façon de faire fonctionner les deux fournisseurs en parallèle.

## Concepts

| Amazon SES | Emailit |
| --- | --- |
| Compte AWS dans une région | [Espace de travail](/fr/docs/workspaces/) |
| Identités vérifiées : domaines et adresses e-mail | [Domaines d’envoi](/fr/docs/domains/). Les identités à adresse e-mail unique ne sont pas disponibles. |
| Enregistrements CNAME Easy DKIM | Un seul enregistrement TXT DKIM, `emailit._domainkey` |
| Domaine MAIL FROM personnalisé | Le return-path `emailit.<your domain>`, dont chaque domaine dispose |
| Sandbox et demande d’accès production | [Mode bac à sable et accès production](/fr/docs/workspaces/production-access/). En mode bac à sable, vous pouvez envoyer aux adresses e-mail des comptes des membres de l’espace de travail. |
| Quota d’envoi et débit d’envoi maximal | [Limites d’envoi](/fr/docs/limits/) : e-mails par seconde et par jour, réinitialisées à minuit UTC |
| Identifiants IAM et signature SigV4 | [Clés API](/fr/docs/developers/api-keys/) dans un en-tête `Authorization: Bearer` |
| Identifiants SMTP | Votre clé API, utilisée comme mot de passe SMTP |
| Configuration sets et destinations d’événements (SNS, EventBridge, Firehose) | [Webhooks](/fr/docs/webhooks/) qui envoient du JSON signé à votre endpoint HTTPS |
| Liste de suppression au niveau du compte | [Liste d’adresses bloquées](/fr/docs/suppressions/) de l’espace de travail |
| Modèles d’e-mail | [Modèles](/fr/docs/templates/) avec un alias et des versions |
| Règles de réception (receipt rules) | [E-mails entrants](/fr/docs/inbound/) avec le webhook `email.received` |
| Tags d’e-mail | `meta` |
| IP dédiées | [IP dédiées](/fr/docs/deliverability/dedicated-ips/) sur demande |
| Listes de contacts | [Contacts](/fr/docs/contacts/), [listes de contacts](/fr/docs/audiences/) et [campagnes](/fr/docs/campaigns/) |

## Mettre à jour vos appels API

Les appels SES sont signés avec vos identifiants AWS : vous les effectuez donc généralement via un SDK AWS. Avec Emailit, vous envoyez une requête JSON avec une clé API, ou vous utilisez le [SDK Emailit](/fr/docs/sdks/) de votre langage. En Node.js :

```javascript title="Before: Amazon SES (AWS SDK v3)"

const ses = new SESv2Client({ region: 'eu-west-1' });

await ses.send(new SendEmailCommand({
  FromEmailAddress: 'Acme <hello@acme.com>',
  Destination: { ToAddresses: ['ada@example.com'] },
  Content: {
    Simple: {
      Subject: { Data: 'Your receipt' },
      Body: {
        Text: { Data: 'Thanks for your order.' },
        Html: { Data: '<p>Thanks for your order.</p>' },
      },
    },
  },
}));
```

```javascript title="After: Emailit"

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',
  text: 'Thanks for your order.',
  html: '<p>Thanks for your order.</p>',
});
```

| Amazon SES (API v2 `SendEmail`) | Emailit (`POST /v2/emails`) |
| --- | --- |
| Identifiants AWS et signature SigV4 | `Authorization: Bearer secret_…` |
| `FromEmailAddress` | `from` |
| `Destination.ToAddresses`, `CcAddresses`, `BccAddresses` | `to`, `cc`, `bcc`, 50 adresses au maximum pour chacun |
| `ReplyToAddresses` | `reply_to` |
| `Content.Simple.Subject.Data` | `subject` |
| `Content.Simple.Body.Html.Data`, `Text.Data` | `html`, `text` |
| `Content.Template.TemplateName` | `template`, un alias ou un ID |
| `Content.Template.TemplateData` (une chaîne JSON) | `variables` (un objet JSON) |
| `Content.Raw` (un message MIME complet) | Envoyez le message MIME via le [relais SMTP](/fr/docs/smtp/), ou reconstruisez-le avec `html`, `text` et `attachments` |
| `EmailTags` | `meta`, renvoyé dans les événements webhook |
| `ConfigurationSetName` | Inutile. Les événements sont envoyés à vos webhooks, et le suivi se règle par domaine ou par e-mail avec `tracking`. |
| `MessageId` de la réponse | `200` avec `id` (`em_…`), `message_id`, `status: "accepted"` et `ids` par destinataire |

Emailit prend aussi en charge la programmation avec `scheduled_at` et les relances sûres avec un en-tête `Idempotency-Key`, ce que SES ne propose pas à l’envoi. Consultez [Envoyer un e-mail](/fr/docs/email-api/send-email/).

## Changer les paramètres SMTP

| Paramètre | Amazon SES | Emailit |
| --- | --- | --- |
| Hôte | `email-smtp.<region>.amazonaws.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 | Votre nom d’utilisateur SMTP SES | `emailit` |
| Mot de passe | Votre mot de passe SMTP SES | Votre clé API Emailit |

Emailit ne lit pas les en-têtes SES comme `X-SES-CONFIGURATION-SET`. Supprimez-les. Consultez [Paramètres SMTP](/fr/docs/smtp/settings/).

## Faire correspondre les notifications d’événements

SES publie les événements via les configuration sets vers SNS, EventBridge ou Firehose. Emailit les envoie directement à votre endpoint HTTPS sous forme de webhooks : il n’y a donc aucun topic auquel s’abonner ni aucun abonnement à confirmer.

| Type d’événement SES | Événement Emailit |
| --- | --- |
| `Send` | `email.accepted` (API uniquement) |
| `Delivery` | `email.delivered` |
| `DeliveryDelay` | `email.attempted` |
| `Bounce` avec `bounceType` `Permanent` | `email.bounced` |
| `Bounce` avec `bounceType` `Transient` | `email.attempted` pendant qu’Emailit réessaie, puis `email.bounced` si toutes les nouvelles tentatives échouent |
| `Complaint` | `email.complained` |
| `Open` | `email.loaded` |
| `Click` | `email.clicked` |
| `Subscription` | `email.unsubscribed`, pour les e-mails de campagne uniquement |
| `Reject`, `Rendering Failure` | Pas d’équivalent direct. Les erreurs dans la requête, comme un modèle manquant, sont renvoyées immédiatement par l’API, et les messages qu’Emailit ne livrera pas reçoivent le statut `held`. |
| Règle de réception avec une action SNS ou Lambda | `email.received`, puis récupérez le contenu avec [`GET /emails/{id}`](/fr/docs/api-reference/emails/get/) |

Le payload change aussi :

- Chaque requête Emailit est un tableau JSON de 100 événements au maximum, avec le nom dans `type` et l’e-mail dans `data.object`.
- Utilisez `data.object.id`, l’ID `em_` de la réponse d’envoi, au lieu du `messageId` de SES. Vos valeurs `meta` se trouvent dans `data.object.meta`.
- Au lieu de vérifier les signatures des messages SNS, vérifiez `X-Emailit-Signature` à l’aide de `X-Emailit-Timestamp` et de votre secret `whsec_`. Consultez [Signature des requêtes](/fr/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);
}
```

## Transférer les adresses bloquées

1. Exportez la liste de suppression SES au niveau du compte avec l’AWS CLI. Si la sortie contient un `NextToken`, répétez la commande avec `--next-token` jusqu’à obtenir toutes les pages.

```bash
aws sesv2 list-suppressed-destinations --output json \
  | jq -r '(["email","type","reason"] | @csv),
           (.SuppressedDestinationSummaries[] | [.EmailAddress, "recipient", ("ses " + .Reason)] | @csv)' \
  > suppressions.csv
```

   Cette commande produit un CSV avec les colonnes `email,type,reason`. Chaque ligne utilise le type `recipient`, qui bloque les envois par l’API, par SMTP et par les campagnes vers l’adresse.

2. Si vous tenez votre propre liste de rebonds et de plaintes issus des notifications SNS, ajoutez aussi ces adresses.

3. Dans **Email API → Suppressions**, 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.

Consultez [Gérer les adresses bloquées](/fr/docs/suppressions/manage/).

## Transférer les modèles

Récupérez chaque modèle avec `aws sesv2 get-email-template --template-name <name>`, puis importez son HTML dans **Email Marketing → Templates** ou créez-le avec l’[API des modèles](/fr/docs/api-reference/templates/create/). Utilisez le nom du modèle SES comme alias Emailit, s’il respecte le format des alias : lettres minuscules, chiffres, `-` et `_`.

Les modèles SES utilisent des balises de type Handlebars. Temple couvre les usages courants :

| Amazon SES | Emailit (Temple) |
| --- | --- |
| `{{name}}`, `{{user.name}}` | Identique |
| `{{#if plan}}…{{else}}…{{/if}}` | Identique |
| `{{#each items}}…{{/each}}` | Non pris en charge. Générez la liste dans votre code et transmettez-la comme une seule variable. |
| `TemplateData` sous forme de chaîne JSON | `variables` sous forme d’objet JSON |
| Pas de valeur par défaut intégrée | `{{name\|"there"}}` ajoute une valeur de repli |

Temple n’échappe jamais le HTML : échappez les saisies des utilisateurs avant de les transmettre. Consultez [Temple](/fr/docs/templates/temple/).

## Modifier le DNS

Ajoutez votre domaine dans **Email API → Domains** 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 CNAME Easy DKIM de SES ni avec un sous-domaine MAIL FROM personnalisé. Conservez votre enregistrement DMARC. Consultez [Enregistrements DNS](/fr/docs/domains/dns-records/).

Après la bascule, supprimez les CNAME DKIM de SES et les enregistrements MAIL FROM personnalisés, puis supprimez les identités dans SES. Si vous recevez des e-mails avec des règles de réception SES, déplacez-les d’abord vers un [sous-domaine de réception](/fr/docs/inbound/set-up/) Emailit.

## Étapes suivantes

- [Liste de contrôle avant la mise en production](/fr/docs/get-started/go-live/)
- [Configurer des webhooks](/fr/docs/webhooks/set-up/)
- [Migration prioritaire](/fr/docs/programs/priority-migration/) : laissez les ingénieurs d’Emailit effectuer la migration avec vous

---
Source: https://emailit.com/fr/docs/migrate/amazon-ses/
