Guida
Migra da Amazon SES
Passa da Amazon SES a Emailit. Fai corrispondere identità, sandbox e quote, sostituisci le chiamate SDK e le credenziali SMTP e trasforma gli eventi SNS in webhook firmati.
Questa guida fa corrispondere concetti, chiamate API, notifiche di eventi, soppressioni e template di Amazon SES ai loro equivalenti in Emailit. Leggi prima Passa a Emailit per l’ordine generale e per sapere come usare entrambi i provider in parallelo.
Concetti
| Amazon SES | Emailit |
|---|---|
| Account AWS in una regione | Workspace |
| Verified identities: domini e indirizzi email | Domini di invio. Le identità costituite da un singolo indirizzo email non sono disponibili. |
| Record CNAME di Easy DKIM | Un solo record TXT DKIM, emailit._domainkey |
| Custom MAIL FROM domain | Il return path emailit.<your domain>, che ogni dominio ha |
| Sandbox e richiesta di production access | Modalità sandbox e accesso alla produzione. In modalità sandbox puoi inviare agli indirizzi email degli account dei membri del workspace. |
| Sending quota e maximum send rate | Limiti di invio: email al secondo e al giorno, azzerati a mezzanotte UTC |
| Credenziali IAM e firma SigV4 | Chiavi API in un header Authorization: Bearer |
| Credenziali SMTP | La tua chiave API, usata come password SMTP |
| Configuration sets ed event destinations (SNS, EventBridge, Firehose) | Webhook che inviano JSON firmato al tuo endpoint HTTPS |
| Account-level suppression list | La lista di soppressione del workspace |
| Email templates | Template con un alias e versioni |
| Receipt rules | Email in entrata con il webhook email.received |
| Email tags | meta |
| Dedicated IPs | IP dedicati su richiesta |
| Contact lists | Contatti, liste e campagne |
Aggiorna le chiamate API
Le chiamate SES sono firmate con le tue credenziali AWS, quindi di solito le fai tramite un SDK AWS. Con Emailit invii una richiesta JSON con una chiave API, oppure usi l’SDK di Emailit per il tuo linguaggio. In 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) |
|---|---|
| Credenziali AWS e firma SigV4 | Authorization: Bearer secret_… |
FromEmailAddress |
from |
Destination.ToAddresses, CcAddresses, BccAddresses |
to, cc, bcc, fino a 50 ciascuno |
ReplyToAddresses |
reply_to |
Content.Simple.Subject.Data |
subject |
Content.Simple.Body.Html.Data, Text.Data |
html, text |
Content.Template.TemplateName |
template, un alias o un ID |
Content.Template.TemplateData (una stringa JSON) |
variables (un oggetto JSON) |
Content.Raw (un messaggio MIME completo) |
Invia il messaggio MIME tramite l’SMTP relay, oppure ricostruiscilo con html, text e attachments |
EmailTags |
meta, restituito negli eventi webhook |
ConfigurationSetName |
Non serve. Gli eventi vanno ai tuoi webhook, e il tracciamento si imposta per dominio o per singola email con tracking. |
MessageId nella risposta |
200 con id (em_…), message_id, status: "accepted" e ids per destinatario |
Emailit supporta anche la programmazione con scheduled_at e i nuovi tentativi sicuri con un header Idempotency-Key, che SES non offre per l’invio. Vedi Invia un’email.
Cambia le impostazioni SMTP
| Impostazione | Amazon SES | Emailit |
|---|---|---|
| Host | email-smtp.<region>.amazonaws.com |
smtp.emailit.com |
| Porta | 587, 2587 o 25 (STARTTLS), 465 o 2465 (TLS) |
587, 2587, 2525 o 25 (STARTTLS), 465 (TLS) |
| Nome utente | Il tuo nome utente SMTP di SES | emailit |
| Password | La tua password SMTP di SES | La tua chiave API di Emailit |
Emailit non legge gli header di SES come X-SES-CONFIGURATION-SET. Rimuovili. Vedi Impostazioni SMTP.
Fai corrispondere le notifiche di eventi
SES pubblica gli eventi tramite i configuration sets su SNS, EventBridge o Firehose. Emailit li invia direttamente al tuo endpoint HTTPS come webhook, quindi non c’è nessun topic da sottoscrivere o confermare.
| Tipo di evento SES | Evento Emailit |
|---|---|
Send |
email.accepted (solo API) |
Delivery |
email.delivered |
DeliveryDelay |
email.attempted |
Bounce con bounceType Permanent |
email.bounced |
Bounce con bounceType Transient |
email.attempted mentre Emailit ritenta, poi email.bounced se tutti i nuovi tentativi non riescono |
Complaint |
email.complained |
Open |
email.loaded |
Click |
email.clicked |
Subscription |
email.unsubscribed, solo per le email delle campagne |
Reject, Rendering Failure |
Nessun equivalente diretto. Gli errori nella richiesta, come un template mancante, vengono restituiti subito dall’API, e i messaggi che Emailit non consegnerà ricevono lo stato held. |
| Receipt rule con un’azione SNS o Lambda | email.received, poi recupera il contenuto con GET /emails/{id} |
Cambia anche il payload:
- Ogni richiesta di Emailit è un array JSON di massimo 100 eventi, con il nome in
typee l’email indata.object. - Usa
data.object.id, l’IDem_della risposta all’invio, al posto delmessageIddi SES. I tuoi valorimetasono indata.object.meta. - Invece di controllare le firme dei messaggi SNS, verifica
X-Emailit-Signaturerispetto aX-Emailit-Timestampe al tuo secretwhsec_. Vedi Verifica le firme dei webhook.
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 le soppressioni
-
Esporta l’account-level suppression list di SES con la AWS CLI. Se l’output include un
NextToken, ripeti il comando con--next-tokenfinché non hai tutte le pagine.aws sesv2 list-suppressed-destinations --output json \ | jq -r '(["email","type","reason"] | @csv), (.SuppressedDestinationSummaries[] | [.EmailAddress, "recipient", ("ses " + .Reason)] | @csv)' \ > suppressions.csvQuesto comando scrive un CSV con le colonne
email,type,reason. Ogni riga usa il tiporecipient, che blocca gli invii via API, SMTP e campagne all’indirizzo. -
Se tieni una tua lista di bounce e segnalazioni ricavata dalle notifiche SNS, aggiungi anche quegli indirizzi.
-
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.
Vedi Gestisci le soppressioni.
Sposta i template
Recupera ogni template con aws sesv2 get-email-template --template-name <name>, poi importa il suo HTML in Email MarketingTemplates o crealo con l’API dei template. Usa il nome del template SES come alias in Emailit, se rispetta il formato degli alias: lettere minuscole, numeri, - e _.
I template SES usano tag in stile Handlebars. Temple copre le parti più comuni:
| Amazon SES | Emailit (Temple) |
|---|---|
{{name}}, {{user.name}} |
Uguale |
{{#if plan}}…{{else}}…{{/if}} |
Uguale |
{{#each items}}…{{/each}} |
Non supportato. Genera l’elenco nel tuo codice e passalo come un’unica variabile. |
TemplateData come stringa JSON |
variables come oggetto JSON |
| Nessun valore predefinito integrato | {{name|"there"}} aggiunge un valore di riserva |
Temple non applica mai l’escape all’HTML, quindi esegui l’escape dell’input degli utenti prima di passarlo. Vedi Temple.
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 CNAME di Easy DKIM di SES né con un sottodominio Custom MAIL FROM. Mantieni il record DMARC. Vedi Record DNS.
Dopo il passaggio, rimuovi i CNAME DKIM di SES e i record Custom MAIL FROM, ed elimina le identità in SES. Se ricevi posta con le receipt rules di SES, spostala prima su un sottodominio di ricezione di Emailit.
Passaggi successivi
- Checklist per andare in produzione
- Configura un webhook
- Migrazione prioritaria: lascia che i tecnici di Emailit facciano la migrazione insieme a te