Guide
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 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 |
| Identités vérifiées : domaines et adresses e-mail | Domaines d’envoi. 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. 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 : e-mails par seconde et par jour, réinitialisées à minuit UTC |
| Identifiants IAM et signature SigV4 | Clés API 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 qui envoient du JSON signé à votre endpoint HTTPS |
| Liste de suppression au niveau du compte | Liste d’adresses bloquées de l’espace de travail |
| Modèles d’e-mail | Modèles avec un alias et des versions |
| Règles de réception (receipt rules) | E-mails entrants avec le webhook email.received |
| Tags d’e-mail | meta |
| IP dédiées | IP dédiées sur demande |
| Listes de contacts | Contacts, listes de contacts et campagnes |
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 de votre langage. En Node.js :
import { SESv2Client, SendEmailCommand } from '@aws-sdk/client-sesv2';
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>' },
},
},
},
}));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',
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, 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.
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.
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} |
Le payload change aussi :
- Chaque requête Emailit est un tableau JSON de 100 événements au maximum, avec le nom dans
typeet l’e-mail dansdata.object. - Utilisez
data.object.id, l’IDem_de la réponse d’envoi, au lieu dumessageIdde SES. Vos valeursmetase trouvent dansdata.object.meta. - Au lieu de vérifier les signatures des messages SNS, vérifiez
X-Emailit-Signatureà l’aide deX-Emailit-Timestampet de votre secretwhsec_. Consultez Signature des requêtes.
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
-
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-tokenjusqu’à obtenir toutes les pages.aws sesv2 list-suppressed-destinations --output json \ | jq -r '(["email","type","reason"] | @csv), (.SuppressedDestinationSummaries[] | [.EmailAddress, "recipient", ("ses " + .Reason)] | @csv)' \ > suppressions.csvCette commande produit un CSV avec les colonnes
email,type,reason. Chaque ligne utilise le typerecipient, qui bloque les envois par l’API, par SMTP et par les campagnes vers l’adresse. -
Si vous tenez votre propre liste de rebonds et de plaintes issus des notifications SNS, ajoutez aussi ces adresses.
-
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.
Consultez Gérer les adresses bloquées.
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 MarketingTemplates ou créez-le avec l’API des modèles. 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.
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 CNAME Easy DKIM de SES ni avec un sous-domaine MAIL FROM personnalisé. Conservez votre enregistrement DMARC. Consultez Enregistrements DNS.
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 Emailit.
Étapes suivantes
- Liste de contrôle avant la mise en production
- Configurer des webhooks
- Migration prioritaire : laissez les ingénieurs d’Emailit effectuer la migration avec vous