Leitfaden
Von Postmark migrieren
Wechseln Sie von Postmark zu Emailit. Server, Message Streams und Tokens zuordnen, API-Felder umwandeln, SMTP-Einstellungen austauschen und Webhooks, Sperrungen und Vorlagen umziehen.
Diese Anleitung ordnet Konzepte, API-Aufrufe, Webhooks, Sperrungen und Vorlagen von Postmark ihren Entsprechungen in Emailit zu. Lesen Sie zuerst Zu Emailit migrieren für die allgemeine Reihenfolge und den parallelen Betrieb beider Anbieter.
Konzepte
| Postmark | Emailit |
|---|---|
| Account | Konto |
| Server | Workspace oder ein Workspace mit mehreren Versanddomains |
| Server API token | API-Schlüssel mit Sending Only, optional auf eine Domain beschränkt |
| Account API token | API-Schlüssel mit Full Access |
| Transaktionaler Message Stream | Die E-Mail-API und das SMTP-Relay |
| Broadcast-Message-Stream | Kampagnen an Kontaktlisten oder die API mit eigenem Header List-Unsubscribe |
| Inbound-Message-Stream | Eingehende E-Mails auf einer Subdomain wie inbound.acme.com |
| Sender Signatures und Domains | Versanddomains. Sender Signatures für einzelne Adressen gibt es nicht. |
| Vorlagen und Layouts | Vorlagen mit Alias und Versionen. Layouts gibt es nicht. |
| Webhooks pro Stream | Webhooks pro Workspace |
| Sperrungen pro Stream | Eine Sperrliste pro Workspace |
| Activity | Email APIEmails und Email APILogs |
Tag und Metadata |
meta |
Um die Reputation von transaktionalen und Marketing-E-Mails getrennt zu halten, senden Sie sie von unterschiedlichen Domains oder Subdomains, etwa mail.acme.com für Belege und news.acme.com für Newsletter.
API-Aufrufe anpassen
Aus POST /email von Postmark mit einem X-Postmark-Server-Token wird POST /v2/emails mit einem Bearer-Token. Die Feldnamen wechseln von PascalCase zu 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 (durch Kommas getrennte Strings) |
to, cc, bcc als String oder Array mit jeweils bis zu 50 |
ReplyTo |
reply_to |
Subject |
subject |
HtmlBody, TextBody |
html, text |
Headers: [{ "Name": "…", "Value": "…" }] |
headers: { "Name": "Value" } |
Metadata, Tag |
meta, in Webhook-Events zurückgegeben |
TrackOpens, TrackLinks |
tracking: { "loads": true, "clicks": true } |
Attachments[] mit Name, Content, ContentType, ContentID |
attachments[] mit filename, content, content_type, content_id |
MessageStream |
Nicht nötig |
POST /email/withTemplate mit TemplateAlias oder TemplateId und TemplateModel |
Dasselbe POST /v2/emails mit template (ein Alias oder eine ID) und variables |
Antwort mit MessageID und ErrorCode: 0 |
200 mit id (em_…), status: "accepted" und ids pro Empfänger. Fehler verwenden HTTP-Statuscodes. |
Emailit hat keinen Batch-Endpunkt. Senden Sie eine Anfrage pro Nachricht, jeweils mit bis zu 50 Empfängern, und fügen Sie einen Header Idempotency-Key hinzu, damit Wiederholungen sicher sind. Siehe E-Mail senden.
SMTP-Einstellungen umstellen
| Einstellung | Postmark | Emailit |
|---|---|---|
| Host | smtp.postmarkapp.com |
smtp.emailit.com |
| Port | 587, 2525 oder 25 |
587 (STARTTLS), 465 (TLS), 2525, 2587 oder 25 |
| Benutzername | Ihr Server API Token | emailit |
| Passwort | Ihr Server API Token | Ihr Emailit-API-Schlüssel |
Emailit liest keine X-PM-*-Header wie X-PM-Message-Stream oder X-PM-Tag. Entfernen Sie sie und legen Sie das Tracking stattdessen bei der Domain fest. Siehe SMTP-Einstellungen.
Webhook-Events zuordnen
| Postmark-Webhook | Emailit-Event |
|---|---|
| Delivery | email.delivered |
| Bounce, Typen für Hard Bounces | email.bounced |
| Bounce, Typen für Soft Bounces oder vorübergehende Fehler | email.attempted, während Emailit es erneut versucht, dann email.bounced, wenn alle Wiederholungen fehlschlagen |
| Spam Complaint | email.complained |
| Open | email.loaded |
| Click | email.clicked |
| Subscription Change | email.unsubscribed für Kampagnen-E-Mails sowie suppression.created oder suppression.deleted für Sperrungen, die Sie per API hinzufügen oder entfernen |
| Inbound | email.received, dann den Inhalt mit GET /emails/{id} abrufen |
Emailit sendet außerdem email.accepted, wenn die API eine E-Mail annimmt. Dafür hat Postmark keinen Webhook.
Das Anfrageformat ändert sich:
- Postmark sendet einen Datensatz pro Anfrage und benennt ihn in
RecordType. Emailit sendet ein JSON-Array mit bis zu 100 Events, mit dem Namen intypeund der E-Mail indata.object. - Verwenden Sie
data.object.id, dieem_-ID aus der Antwort auf den Versand, stattMessageID. Ihremeta-Werte stehen indata.object.meta. - Postmark-Webhooks werden meist mit Basic-Authentication-Zugangsdaten in der URL geschützt. Emailit signiert stattdessen jede Anfrage: Verifizieren Sie
X-Emailit-Signatureanhand vonX-Emailit-Timestampund Ihremwhsec_-Secret. Siehe Anfragesignatur.
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);
}Sperrungen umziehen
-
Exportieren Sie die Sperrungen jedes Message Streams von Postmark, über den Sie senden, auf der Suppressions-Seite des Streams oder mit der Suppressions-Dump-API. Nehmen Sie Hard Bounces, Spam-Beschwerden und manuelle Sperrungen mit.
-
Erstellen Sie eine CSV-Datei mit den Spalten
email,type,reason:email,type,reason old-address@example.com,recipient,postmark hard bounce angry@example.com,recipient,postmark spam complaintVerwenden Sie den Typ
recipientfür Adressen, die nie E-Mails erhalten dürfen. Er blockiert Versände per API, SMTP und Kampagne. Für Personen, die sich nur von Ihren Broadcasts abgemeldet haben, verwenden Sie den Typunsubscribe, der Kampagnen stoppt, transaktionale E-Mails aber weiter durchlässt. -
Wählen Sie unter Email APISuppressions die Option Import und laden Sie die Datei hoch. Jede Datei darf bis zu 10.000 Zeilen haben und höchstens 8 MB groß sein. Duplikate werden übersprungen.
Siehe Sperrungen verwalten.
Vorlagen umziehen
Kopieren Sie das HTML jeder Vorlage aus Postmark einschließlich ihres Layouts und importieren Sie es dann unter Email MarketingTemplates oder erstellen Sie die Vorlage mit der Vorlagen-API. Emailit hat keine Layouts, führen Sie Layout und Inhalt daher in einer Vorlage zusammen. Verwenden Sie denselben Alias wie in Postmark, damit Ihre Codeänderungen klein bleiben.
Postmark-Vorlagen verwenden Mustachio. Temple deckt einfache Werte und Bedingungen ab:
| Postmark (Mustachio) | Emailit (Temple) |
|---|---|
{{name}} |
{{name}} |
{{company.name}} |
{{company.name}} |
Abschnitte {{#company}}…{{/company}} |
{{#if company}}…{{/if}}, darin mit vollständigen Pfaden wie {{company.name}} |
Invertierte Abschnitte {{^name}}…{{/name}} |
{{#if name}}{{else}}…{{/if}} |
{{#each items}}…{{/each}} |
Nicht unterstützt. Rendern Sie die Liste in Ihrem Code und übergeben Sie sie als eine Variable. |
TemplateModel |
variables |
Temple maskiert HTML nie. Maskieren Sie Benutzereingaben daher, bevor Sie sie übergeben. Ein fehlender Wert wird als leerer String dargestellt, sofern Sie keinen Standardwert hinzufügen, etwa {{name|"there"}}. Siehe Temple.
DNS ändern
Fügen Sie Ihre Domain unter Email APIDomains hinzu und legen Sie die Einträge von Emailit an. Sie verwenden eigene Namen (emailit._domainkey, emailit.<domain> und optional go und inbound) und kollidieren daher weder mit dem DKIM-Eintrag von Postmark noch mit dessen Return-Path-CNAME pm-bounces. Behalten Sie Ihren DMARC-Eintrag. Entfernen Sie nach der Umstellung die Einträge von Postmark. Siehe DNS-Einträge.
Wenn Sie eingehende E-Mails mit Postmark verarbeiten, verlagern Sie das auf eine Inbound-Subdomain von Emailit und aktualisieren Sie die Adressen, die Ihre App herausgibt. Siehe Eingehende E-Mails einrichten.
Nächste Schritte
- Go-live-Checkliste
- Webhook einrichten
- Priority migration: Lassen Sie Engineers von Emailit den Umzug gemeinsam mit Ihnen erledigen