Zum Hauptinhalt springen
MailLand

Migrationsleitfaden

Von Postmark zu Mail.Land migrieren

Postmark und Mail.Land erwarten beide einen JSON-Sendeaufruf, daher lassen sich die meisten Felder eins zu eins zuordnen. Dieser Leitfaden nennt jedes gängige Feld, die zu ändernden SMTP-Einstellungen und die Unterschiede, die eine Codeänderung erfordern.

SMTP
# Before (Postmark)
SMTP_HOST=smtp.postmarkapp.com   # broadcasts: smtp-broadcasts.postmarkapp.com
SMTP_PORT=587                    # STARTTLS
SMTP_USER=<Server API token, or SMTP token access key>
SMTP_PASS=<Server API token, or SMTP token secret key>

# After (Mail.Land)
SMTP_HOST=smtp.mail.land
SMTP_PORT=587          # STARTTLS
SMTP_USER=apikey       # any value; Mail.Land ignores it
SMTP_PASS=ml_pet_...   # transactional; use an ml_pem_ key for broadcasts

Postmark-Konzepte in Mail.Land

Postmark-Konzepte in Mail.Land
PostmarkMail.Land
Server und Server API TokenWorkspace und API-Schlüssel (Zugangsdaten), jeweils auf API oder SMTP, auf Domains und auf IP-Adressen beschränkbar
Message Streams (Transaktion, Broadcast)Der Stream des Schlüssels: Transaktion (ml_pet_) oder Marketing (ml_pem_)
Sender Signatures und DomainsVerifizierte Domain (SPF, DKIM, DMARC und Return-Path)
Vorlagen und Layouts (Mustachio)Vorlagen mit {{name}}-Platzhaltern
Sperrlisten pro Message StreamSperrlisten mit Typ und Geltungsbereich
WebhooksMit HMAC-SHA256 signierte Webhooks, ein Geheimnis pro Webhook
Inbound-StreamEingangsrouten

Die passenden API-Schlüssel anlegen

Bei Postmark wählt das Feld oder der Header MessageStream den Stream. Bei Mail.Land übernimmt das der Schlüssel: Sein Präfix zeigt Modus und Stream. Legen Sie pro Anwendung und Stream einen Schlüssel an.

Die passenden API-Schlüssel anlegen
PräfixWofür er gedacht ist
ml_pet_Produktion, Transaktion: Belege, Passwort-Zurücksetzungen, Benachrichtigungen. Bis zu 5 Empfänger pro Anfrage.
ml_pem_Produktion, Marketing: Newsletter und Massenversand mit send-batch, bis zu 10.000 Empfänger pro Aufruf.
ml_set_Sandbox, Transaktion: Mit sandboxBehavior LogOnly (Standard) werden Anfragen angenommen und protokolliert, aber nie zugestellt. Nutzen Sie ihn für Ihre Integrationstests.

Jeder Schlüssel lässt sich auf API, SMTP oder beides, auf ausgewählte Domains und auf bekannte IP-Adressen beschränken. Ein Schlüssel wird einmal angezeigt; Mail.Land speichert nur einen Hash davon.

Dokumentation zu API-Schlüsseln

SMTP umstellen: Host und Zugangsdaten ändern

Postmark verwendet ein Server API Token oder ein SMTP Token sowie einen Header zur Wahl des Streams. Mail.Land verwendet Ihren API-Schlüssel als Passwort, ignoriert den Benutzernamen und leitet den Stream aus dem Schlüssel ab.

SMTP umstellen: Host und Zugangsdaten ändern
EinstellungPostmarkMail.Land
Hostsmtp.postmarkapp.com, für Broadcasts smtp-broadcasts.postmarkapp.comsmtp.mail.land
Port25, 587 oder 2525, mit STARTTLS587 mit STARTTLS
BenutzernameServer API Token oder Access Key des SMTP TokensBeliebiger Wert, zum Beispiel apikey
PasswortServer API Token oder Secret Key des SMTP TokensEin Mail.Land-API-Schlüssel mit aktiviertem SMTP
StreamHeader X-PM-Message-StreamDer Schlüssel: ml_pet_ für Transaktion, ml_pem_ für Marketing

Mail.Land akzeptiert die Anmeldung nur nach STARTTLS. Mail.Land wertet den Header X-PM-Message-Stream nicht aus: Der Schlüssel bestimmt den Stream. Nachrichten dürfen bis zu 15 MiB groß sein.

Dokumentation zum SMTP-Relay

Den API-Aufruf umstellen

Beide APIs erwarten JSON. Postmark verwendet PascalCase-Namen und den Header X-Postmark-Server-Token; Mail.Land verwendet camelCase-Namen und den Header X-API-Key. Hier sehen Sie dieselbe Nachricht in beiden sowie einen Versand mit Vorlage.

curl -X POST https://api.postmarkapp.com/email \
  -H "X-Postmark-Server-Token: $POSTMARK_SERVER_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "From": "Your Shop <[email protected]>",
    "To": "[email protected]",
    "ReplyTo": "[email protected]",
    "Subject": "Order 12345 has shipped",
    "TextBody": "Your order is on its way.",
    "HtmlBody": "<p>Your order is on its way.</p>",
    "Tag": "order-shipped",
    "MessageStream": "outbound"
  }'
curl -X POST https://api.mail.land/v1/transactional/send \
  -H "X-API-Key: $MAILLAND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": { "email": "[email protected]", "name": "Your Shop" },
    "to": [{
      "email": "[email protected]", "name": "Jane",
      "variables": { "orderNumber": "12345" }
    }],
    "replyTo": "[email protected]",
    "subject": "Order {{orderNumber}} has shipped",
    "textContent": "Your order {{orderNumber}} is on its way.",
    "htmlContent": "<p>Your order {{orderNumber}} is on its way.</p>",
    "tags": ["order-shipped"]
  }'
# MAILLAND_API_KEY=ml_pet_...  (production, transactional)

Feldzuordnung für den Sendeaufruf

Von POST /email und /email/withTemplate zu POST /v1/transactional/send.

Feldzuordnung für den Sendeaufruf
PostmarkMail.LandHinweis
X-Postmark-Server-Token: <token>X-API-Key: <key>Ein anderer Header.
Fromfrom.email, from.nameTrennen Sie den Anzeigenamen von der Adresse. Die Adresse muss zu einer verifizierten Domain gehören.
Toto[].email, to[].nameEin Array von Objekten statt eines kommagetrennten Strings. Bis zu 5 Empfänger pro Anfrage mit einem Transaktionsschlüssel; jeder erhält eine eigene Kopie.
Cc, BccKeineNicht unterstützt. Senden Sie jedem Empfänger eine eigene Nachricht.
SubjectsubjectErforderlich, außer Sie verwenden eine Vorlage.
HtmlBodyhtmlContent
TextBodytextContent
ReplyToreplyToEin einzelner Adress-String. Wenn Sie mehrere kommagetrennte Reply-to-Adressen verwendet haben, behalten Sie eine.
TagtagsEin Array, sodass eine Nachricht mehrere Tags tragen kann.
MetadataKeineEs gibt kein Feld für Schlüssel-Wert-Metadaten. Verwenden Sie tags oder einen eigenen Header.
Headers [{ Name, Value }]customHeadersEin Objekt aus Headernamen und -werten statt eines Arrays.
TrackOpenstracking.opensDie eigene Einstellung der Domain zum Öffnungs-Tracking hat Vorrang.
TrackLinkstracking.clicksEin boolescher Wert statt None, HtmlAndText, HtmlOnly oder TextOnly.
Attachments[].Name, Content, ContentType, ContentIDattachments[].fileName, content, contentType, contentId, inlineBase64-Inhalt wie bisher. Setzen Sie inline: true für ein eingebettetes Bild. Bis zu 10 Anhänge und insgesamt 10 MiB.
MessageStreamKeineDer Schlüssel bestimmt den Stream: ml_pet_ oder ml_pem_.
TemplateId, TemplateAliastemplateIdLegen Sie die Vorlage zuerst in Mail.Land neu an; sie erhält eine neue ID.
TemplateModelvariables, to[].variablesNur flache Werte, da Platzhalter keine Abschnitte oder Schleifen kennen.
POST /email/batch (bis zu 500 Nachrichten)POST /v1/transactional/send-batchEin anderes Modell: gemeinsamer Inhalt für bis zu 10.000 Empfänger mit jeweils eigenen Variablen, gesendet mit einem Marketingschlüssel. Für unterschiedliche Nachrichten machen Sie je einen eigenen Sendeaufruf.
Keine EntsprechungscheduledAtPlanen Sie eine Nachricht bis zu 7 Tage im Voraus.
Keine EntsprechungHeader X-Idempotency-KeyInnerhalb der Aufbewahrungsfrist liefert eine Wiederholung mit demselben Schlüssel die ursprüngliche Antwort, statt erneut zu senden.

Mail.Land antwortet mit 202 Accepted, einer jobId, einer Nachrichten-ID pro angenommenem Empfänger sowie den Listen der angenommenen und abgelehnten Empfänger.

Dokumentation zur REST-API

Domain und DNS-Einträge hinzufügen

Fügen Sie die Domain in Mail.Land hinzu und veröffentlichen Sie die Einträge, die das Dashboard anzeigt. SPF, DKIM und DMARC müssen verifiziert sein, bevor Sie senden können. Das geht, während Postmark noch sendet.

Domain und DNS-Einträge hinzufügen
EintragNameWertHinweis
SPF (TXT)yourdomain.cominclude:spf.mlnd.netFügen Sie das include zu Ihrem bestehenden SPF-Eintrag hinzu. Eine Domain darf nur einen SPF-Eintrag haben.
DKIM (TXT)mlnd._domainkey.yourdomain.comv=DKIM1; k=rsa; p=...Der Selektor ist mlnd, daher steht der Eintrag neben dem DKIM-Eintrag von Postmark.
DMARC (TXT)_dmarc.yourdomain.comv=DMARC1; p=...Erforderlich. Behalten Sie einen einzigen DMARC-Eintrag; ein vorhandener mit Richtlinie genügt.
Return-Path (CNAME)bounce.yourdomain.combounce.mlnd.netAuf DNS only setzen, nicht über einen Proxy. Prüfen Sie, dass dieser Name noch nicht verwendet wird.

Behalten Sie die DNS-Einträge von Postmark bis zum Abschluss des Umzugs und entfernen Sie sie erst, wenn die letzte Nachricht verschickt ist.

Dokumentation zur DNS-Einrichtung

Zuerst die Sperrlisten importieren

Postmark führt Sperrlisten pro Message Stream. Exportieren Sie die Liste jedes Streams, zum Beispiel mit GET /message-streams/<stream>/suppressions/dump, und importieren Sie sie mit passendem Typ und Geltungsbereich in Mail.Land, im Dashboard oder mit POST /v1/transactional/suppressions/import.

Zuerst die Sperrlisten importieren
Grund bei PostmarkTyp in Mail.LandGeltungsbereich
HardBounceHardBounceGlobal
SpamComplaintComplaintGlobal
ManualSuppression in einem Broadcast-Stream (Abmeldungen)UnsubscribeMarketing; oder List, das nur für Kampagnen an die passende Mail.Land-Mailingliste gilt
ManualSuppression in einem Transaktions-StreamManualTransactional

Importieren Sie vor dem ersten Versand über Mail.Land, damit abgemeldete Personen von Anfang an gesperrt bleiben. Bereits vorhandene Adressen werden übersprungen, nicht doppelt angelegt.

Dokumentation zu Sperrlisten

Webhooks auf Mail.Land umstellen

Fügen Sie Ihren Endpunkt in Mail.Land hinzu, wählen Sie die Ereignisse und prüfen Sie den Header X-MLND-Signature mit dem Geheimnis dieses Webhooks. Wenn Sie Ihren Postmark-Endpunkt mit Basic-Authentifizierung oder einer IP-Allowlist geschützt haben, prüfen Sie stattdessen die Signatur.

Webhooks auf Mail.Land umstellen
Postmark-WebhookMail.Land-EreignisHinweis
Zustellung (Delivery)message.delivered
Bouncemessage.bouncedUmfasst Hard und Soft Bounces. Vorübergehende Verzögerungen sind message.deferred.
Spam-Beschwerde (Spam complaint)message.complained
Abo-Änderung (Subscription change)message.unsubscribedWird für die eigene Abmeldung des Empfängers gesendet, nicht für Änderungen, die Sie über die API vornehmen.
Öffnung, Klick (Open, Click)Noch nicht verfügbarÖffnungs- und Klick-Ereignisse sind im Katalog aufgeführt, werden heute aber nicht gesendet.
Eingang (Inbound)inbound.receivedRichten Sie eine Eingangsroute für die Empfangsadresse ein.
SMTP-API-FehlerKeineDas SMTP-Relay lehnt eine Nachricht noch in der Sitzung mit einem Antwortcode ab.

Deduplizieren Sie anhand von event_id, denn eine wiederholte Zustellung trägt dieselbe Ereignis-ID. Ein Status kann später korrigiert werden; verarbeiten Sie daher auch nach einem finalen Ereignis weiter und vergleichen Sie status_version.

Webhook-Ereignisse

Prüfung der Webhook-Signatur

Vorlagen neu anlegen

Legen Sie jede Vorlage im Mail.Land-Dashboard oder über die Vorlagen-API an und senden Sie sie mit templateId und variables. Jeder Platzhalter braucht einen Wert, sonst wird der Versand mit 422 und den fehlenden Namen abgelehnt.

Vorlagen neu anlegen
PostmarkMail.Land
{{firstName}}{{firstName}}
{{#each items}} ... {{/each}}Keine
{{#section}}, {{^section}}Keine
Layout-VorlagenKeine

Mail.Land-Platzhalter sind schlicht: keine Abschnitte, Schleifen oder Layouts. Übergeben Sie flache Werte, bauen Sie Listen in Ihrer Anwendung und wiederholen Sie gemeinsames Kopf- und Fußzeilen-HTML in jeder Vorlage.

Dokumentation zu Vorlagen

Schrittweise wechseln

  1. Fügen Sie Ihre Absender-Domain in Mail.Land hinzu und verifizieren Sie sie; ergänzen Sie include:spf.mlnd.net in Ihrem bestehenden SPF-Eintrag.
  2. Exportieren Sie die Sperrlisten jedes Postmark-Message-Streams und importieren Sie sie.
  3. Legen Sie für jede Anwendung einen Transaktionsschlüssel an und einen Marketingschlüssel, wenn Sie Broadcasts senden.
  4. Legen Sie Ihre Vorlagen und Webhooks neu an.
  5. Legen Sie einen Sandbox-Schlüssel mit sandboxBehavior LogOnly an und führen Sie Ihre Integrationstests gegen Mail.Land aus, ohne E-Mails zuzustellen.
  6. Senden Sie echte Nachrichten an Adressen, die Sie kontrollieren, und prüfen Sie sie im E-Mail-Log.
  7. Verlagern Sie eine Anwendung oder einen kleinen Teil des Volumens und beobachten Sie Zustellung, Bounces und Beschwerden.
  8. Solange beide Anbieter laufen, halten Sie Abmeldungen in beide Richtungen synchron: Übertragen Sie neue Abmeldungen, Beschwerden und Bounces von Postmark zu Mail.Land und von Mail.Land zu Postmark, und synchronisieren Sie ein letztes Mal, bevor Sie das restliche Volumen verlagern.
  9. Prüfen Sie das Warm-up Ihrer Domain: In Free und Pro hat eine neue Domain ein Tageslimit, das stufenweise steigt; Sendungen darüber werden abgelehnt. Planen Sie den Umzug innerhalb dieser Grenzen oder fragen Sie uns nach einem eigenen Zeitplan. Max überspringt das Warm-up.
  10. Verlagern Sie dann den Rest und lassen Sie Postmark aktiv, bis die letzten Nachrichten verschickt sind.

Mail.Land vs. Postmark: der belegte Vergleich

Quellen

Postmarks öffentliche Seiten, die für diesen Leitfaden verwendet wurden.

  1. [1]Postmark Email APIhttps://postmarkapp.com/developer/api/email-apigeprüft am 4. November 2026
  2. [2]Postmark Templates APIhttps://postmarkapp.com/developer/api/templates-apigeprüft am 4. November 2026
  3. [3]Postmark: E-Mails per SMTP sendenhttps://postmarkapp.com/developer/user-guide/send-email-with-smtpgeprüft am 4. November 2026
  4. [4]Postmark-Webhooks im Überblickhttps://postmarkapp.com/developer/webhooks/webhooks-overviewgeprüft am 4. November 2026
  5. [5]Postmark Suppressions APIhttps://postmarkapp.com/developer/api/suppressions-apigeprüft am 4. November 2026

Häufige Fragen

Kann ich während der Tests weiter über Postmark senden?

Ja. Die Verifizierung einer Domain in Mail.Land hindert Postmark nicht daran, für sie zu senden. Sie können beide parallel betreiben und das Volumen schrittweise verlagern.

Unterstützt Mail.Land cc und bcc?

Nicht im Sendeaufruf. Jeder Empfänger erhält eine eigene Kopie; senden Sie daher dort, wo Sie cc oder bcc genutzt haben, eine eigene Nachricht.

Wie ersetze ich meinen Broadcast-Stream?

Verwenden Sie für API-Versand einen Marketingschlüssel (ml_pem_) mit send-batch oder erstellen Sie im Pro- oder Max-Tarif eine Kampagne im Dashboard.

Gibt es ein offizielles Mail.Land-SDK?

Noch nicht. Die Dokumentation enthält Beispiele zum Kopieren für die REST-API in cURL, Node.js, Python, PHP, C#, Java und Go, und jede SMTP-Bibliothek funktioniert mit dem Relay.

Bereit für den Wechsel von Postmark?

Erstellen Sie ein kostenloses Konto und senden Sie noch heute Ihren ersten Test. Wenn Sie Hilfe möchten, beschreiben Sie uns Ihre Einrichtung.