# 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](/it/docs/migrate/) per l’ordine generale e per sapere come usare entrambi i provider in parallelo.

## Concetti

| Amazon SES | Emailit |
| --- | --- |
| Account AWS in una regione | [Workspace](/it/docs/workspaces/) |
| Verified identities: domini e indirizzi email | [Domini di invio](/it/docs/domains/). 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](/it/docs/workspaces/production-access/). In modalità sandbox puoi inviare agli indirizzi email degli account dei membri del workspace. |
| Sending quota e maximum send rate | [Limiti di invio](/it/docs/limits/): email al secondo e al giorno, azzerati a mezzanotte UTC |
| Credenziali IAM e firma SigV4 | [Chiavi API](/it/docs/developers/api-keys/) in un header `Authorization: Bearer` |
| Credenziali SMTP | La tua chiave API, usata come password SMTP |
| Configuration sets ed event destinations (SNS, EventBridge, Firehose) | [Webhook](/it/docs/webhooks/) che inviano JSON firmato al tuo endpoint HTTPS |
| Account-level suppression list | La [lista di soppressione](/it/docs/suppressions/) del workspace |
| Email templates | [Template](/it/docs/templates/) con un alias e versioni |
| Receipt rules | [Email in entrata](/it/docs/inbound/) con il webhook `email.received` |
| Email tags | `meta` |
| Dedicated IPs | [IP dedicati](/it/docs/deliverability/dedicated-ips/) su richiesta |
| Contact lists | [Contatti](/it/docs/contacts/), [liste](/it/docs/audiences/) e [campagne](/it/docs/campaigns/) |

## 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](/it/docs/sdks/) per il tuo linguaggio. In Node.js:

```javascript title="Prima: 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="Dopo: 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`) |
| --- | --- |
| 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](/it/docs/smtp/), 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](/it/docs/email-api/send-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](/it/docs/smtp/settings/).

## 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}`](/it/docs/api-reference/emails/get/) |

Cambia anche il payload:

- Ogni richiesta di Emailit è un array JSON di massimo 100 eventi, con il nome in `type` e l’email in `data.object`.
- Usa `data.object.id`, l’ID `em_` della risposta all’invio, al posto del `messageId` di SES. I tuoi valori `meta` sono in `data.object.meta`.
- Invece di controllare le firme dei messaggi SNS, verifica `X-Emailit-Signature` rispetto a `X-Emailit-Timestamp` e al tuo secret `whsec_`. Vedi [Verifica le firme dei webhook](/it/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);
}
```

## Sposta le soppressioni

1. Esporta l’account-level suppression list di SES con la AWS CLI. Se l’output include un `NextToken`, ripeti il comando con `--next-token` finché non hai tutte le pagine.

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

   Questo comando scrive un CSV con le colonne `email,type,reason`. Ogni riga usa il tipo `recipient`, che blocca gli invii via API, SMTP e campagne all’indirizzo.

2. Se tieni una tua lista di bounce e segnalazioni ricavata dalle notifiche SNS, aggiungi anche quegli indirizzi.

3. In **Email API → Suppressions**, 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](/it/docs/suppressions/manage/).

## Sposta i template

Recupera ogni template con `aws sesv2 get-email-template --template-name <name>`, poi importa il suo HTML in **Email Marketing → Templates** o crealo con l’[API dei template](/it/docs/api-reference/templates/create/). 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](/it/docs/templates/temple/).

## Cambia i DNS

Aggiungi il dominio in **Email API → Domains** 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](/it/docs/domains/dns-records/).

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](/it/docs/inbound/set-up/) di Emailit.

## Passaggi successivi

- [Checklist per andare in produzione](/it/docs/get-started/go-live/)
- [Configura un webhook](/it/docs/webhooks/set-up/)
- [Migrazione prioritaria](/it/docs/programs/priority-migration/): lascia che i tecnici di Emailit facciano la migrazione insieme a te

---
Fonte: https://emailit.com/it/docs/migrate/amazon-ses/
