Guida
Migra da Postmark
Passa da Postmark a Emailit. Fai corrispondere server, message streams e token, converti i campi API, cambia le impostazioni SMTP e sposta webhook, soppressioni e template.
Questa guida fa corrispondere concetti, chiamate API, webhook, soppressioni e template di Postmark 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
| Postmark | Emailit |
|---|---|
| Account | Account |
| Server | Workspace, oppure un solo workspace con più domini di invio |
| Server API token | Chiave API Sending Only, facoltativamente limitata a un dominio |
| Account API token | Chiave API Full Access |
| Transactional message stream | L’API email e l’SMTP relay |
| Broadcast message stream | Campagne inviate alle liste, oppure l’API con un tuo header List-Unsubscribe |
| Inbound message stream | Email in entrata su un sottodominio come inbound.acme.com |
| Sender signatures e domini | Domini di invio. Le sender signatures per un singolo indirizzo non sono disponibili. |
| Templates e layouts | Template con un alias e versioni. Non ci sono layout. |
| Webhook per stream | Webhook per workspace |
| Suppressions per stream | Una lista di soppressione per workspace |
| Activity | Email APIEmails e Email APILogs |
Tag e Metadata |
meta |
Per tenere separate la reputazione transazionale e quella di marketing, invia da domini o sottodomini diversi, come mail.acme.com per le ricevute e news.acme.com per le newsletter.
Aggiorna le chiamate API
POST /email di Postmark con un X-Postmark-Server-Token diventa POST /v2/emails con un bearer token. I nomi dei campi passano da PascalCase a snake_case:
curl https://api.postmarkapp.com/email \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Postmark-Server-Token: $POSTMARK_SERVER_TOKEN" \
-d '{
"From": "Acme <hello@acme.com>",
"To": "ada@example.com",
"Subject": "Your receipt",
"TextBody": "Thanks for your order.",
"HtmlBody": "<p>Thanks for your order.</p>",
"MessageStream": "outbound"
}'curl https://api.emailit.com/v2/emails \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "Acme <hello@acme.com>",
"to": "ada@example.com",
"subject": "Your receipt",
"text": "Thanks for your order.",
"html": "<p>Thanks for your order.</p>"
}'| Postmark | Emailit |
|---|---|
Header X-Postmark-Server-Token |
Authorization: Bearer secret_… |
From |
from |
To, Cc, Bcc (stringhe separate da virgole) |
to, cc, bcc come stringa o array di massimo 50 ciascuno |
ReplyTo |
reply_to |
Subject |
subject |
HtmlBody, TextBody |
html, text |
Headers: [{ "Name": "…", "Value": "…" }] |
headers: { "Name": "Value" } |
Metadata, Tag |
meta, restituito negli eventi webhook |
TrackOpens, TrackLinks |
tracking: { "loads": true, "clicks": true } |
Attachments[] con Name, Content, ContentType, ContentID |
attachments[] con filename, content, content_type, content_id |
MessageStream |
Non serve |
POST /email/withTemplate con TemplateAlias o TemplateId e TemplateModel |
Lo stesso POST /v2/emails con template (un alias o un ID) e variables |
Risposta con MessageID ed ErrorCode: 0 |
200 con id (em_…), status: "accepted" e ids per destinatario. Gli errori usano i codici di stato HTTP. |
Emailit non ha un endpoint batch. Invia una richiesta per messaggio, ciascuna con un massimo di 50 destinatari, e aggiungi un header Idempotency-Key così i nuovi tentativi sono sicuri. Vedi Invia un’email.
Cambia le impostazioni SMTP
| Impostazione | Postmark | Emailit |
|---|---|---|
| Host | smtp.postmarkapp.com |
smtp.emailit.com |
| Porta | 587, 2525 o 25 |
587 (STARTTLS), 465 (TLS), 2525, 2587 o 25 |
| Nome utente | Il tuo server API token | emailit |
| Password | Il tuo server API token | La tua chiave API di Emailit |
Emailit non legge gli header X-PM-* come X-PM-Message-Stream o X-PM-Tag. Rimuovili e imposta invece il tracciamento sul dominio. Vedi Impostazioni SMTP.
Fai corrispondere gli eventi webhook
| Webhook di Postmark | Evento Emailit |
|---|---|
| Delivery | email.delivered |
| Bounce, tipi di hard bounce | email.bounced |
| Bounce, tipi soft o transient | email.attempted mentre Emailit ritenta, poi email.bounced se tutti i nuovi tentativi non riescono |
| Spam complaint | email.complained |
| Open | email.loaded |
| Click | email.clicked |
| Subscription change | email.unsubscribed per le email delle campagne, e suppression.created o suppression.deleted per le soppressioni che aggiungi o rimuovi con l’API |
| Inbound | email.received, poi recupera il contenuto con GET /emails/{id} |
Emailit invia anche email.accepted quando l’API accetta un’email, evento per cui Postmark non ha un webhook.
Cambia il formato della richiesta:
- Postmark invia un record per richiesta e ne indica il nome in
RecordType. Emailit invia un array JSON di massimo 100 eventi, con il nome intypee l’email indata.object. - Usa
data.object.id, l’IDem_della risposta all’invio, al posto diMessageID. I tuoi valorimetasono indata.object.meta. - I webhook di Postmark di solito sono protetti con credenziali di autenticazione basic nell’URL. Emailit invece firma ogni richiesta: 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 le suppressions di ogni message stream di Postmark da cui invii, dalla pagina delle suppressions dello stream o con l’API suppressions dump. Includi hard bounce, segnalazioni di spam e soppressioni manuali.
-
Crea un unico CSV con le colonne
email,type,reason:email,type,reason old-address@example.com,recipient,postmark hard bounce angry@example.com,recipient,postmark spam complaintUsa il tipo
recipientper gli indirizzi che non devono mai ricevere email. Blocca gli invii via API, SMTP e campagne. Per le persone che hanno solo rinunciato alle tue comunicazioni broadcast, usa il tipounsubscribe, che ferma le campagne ma lascia passare le email transazionali. -
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
Copia l’HTML di ogni template da Postmark, compreso il suo layout, poi importalo in Email MarketingTemplates o crealo con l’API dei template. Emailit non ha layout, quindi unisci layout e contenuto in un unico template. Usa lo stesso alias che usavi in Postmark, così le modifiche al codice restano minime.
I template di Postmark usano Mustachio. Temple copre i valori semplici e le condizioni:
| Postmark (Mustachio) | Emailit (Temple) |
|---|---|
{{name}} |
{{name}} |
{{company.name}} |
{{company.name}} |
Sezioni {{#company}}…{{/company}} |
{{#if company}}…{{/if}}, con percorsi completi come {{company.name}} all’interno |
Sezioni invertite {{^name}}…{{/name}} |
{{#if name}}{{else}}…{{/if}} |
{{#each items}}…{{/each}} |
Non supportato. Genera l’elenco nel tuo codice e passalo come un’unica variabile. |
TemplateModel |
variables |
Temple non applica mai l’escape all’HTML, quindi esegui l’escape dell’input degli utenti prima di passarlo. Un valore mancante diventa una stringa vuota, a meno che tu non aggiunga un valore predefinito, come {{name|"there"}}. 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 il record DKIM di Postmark né con il suo CNAME di return path pm-bounces. Mantieni il record DMARC. Dopo il passaggio, rimuovi i record di Postmark. Vedi Record DNS.
Se elabori la posta in entrata con Postmark, spostala su un sottodominio di ricezione di Emailit e aggiorna gli indirizzi che la tua app comunica. Vedi Configura le email in entrata.
Passaggi successivi
- Checklist per andare in produzione
- Configura un webhook
- Migrazione prioritaria: lascia che i tecnici di Emailit facciano la migrazione insieme a te