Zum Hauptinhalt springen
MailLand

Migrationsleitfaden

Von Mailgun zu Mail.Land migrieren

Wenn Sie per SMTP senden, ändern Sie nur Host und Passwort. Wenn Sie die Messages-API nutzen, ordnet dieser Leitfaden jedes gängige Mailgun-Feld Mail.Land zu und nennt, was eine Codeänderung erfordert.

SMTP
# Before (Mailgun)
SMTP_HOST=smtp.mailgun.org
SMTP_PORT=587          # STARTTLS
SMTP_USER=<SMTP login of your sending domain>
SMTP_PASS=<SMTP password of that login>

# 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_...   # a Mail.Land key with SMTP enabled

Mailgun-Konzepte in Mail.Land

Mailgun-Konzepte in Mail.Land
MailgunMail.Land
Absender-DomainVerifizierte Domain (SPF, DKIM, DMARC und Return-Path)
API-Schlüssel und Domain-SendeschlüsselAPI-Schlüssel (Zugangsdaten), jeweils auf API oder SMTP, auf Domains und auf IP-Adressen beschränkbar
SMTP-Zugangsdaten pro DomainDerselbe API-Schlüssel, als SMTP-Passwort verwendet
Vorlagen (Handlebars)Vorlagen mit {{name}}-Platzhaltern
Listen für Bounces, Beschwerden und AbmeldungenSperrlisten mit Typ und Geltungsbereich
WebhooksMit HMAC-SHA256 signierte Webhooks, ein Geheimnis pro Webhook
RoutesEingangsrouten

Die passenden API-Schlüssel anlegen

Das Präfix eines Mail.Land-Schlüssels zeigt Modus und Stream. Legen Sie pro Anwendung und Stream einen Schlüssel an und halten Sie Produktionsschlüssel aus Ihren Testsystemen heraus.

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 Passwort ändern

Mailgun verwendet ein SMTP-Login pro Absender-Domain. Mail.Land verwendet Ihren API-Schlüssel als Passwort und ignoriert den Benutzernamen.

SMTP umstellen: Host und Passwort ändern
EinstellungMailgunMail.Land
Hostsmtp.mailgun.orgsmtp.mail.land
Port25, 587 oder 2525 mit STARTTLS oder 465 mit TLS587 mit STARTTLS
BenutzernameDas SMTP-Login Ihrer Absender-DomainBeliebiger Wert, zum Beispiel apikey
PasswortDas Passwort dieses SMTP-LoginsEin Mail.Land-API-Schlüssel mit aktiviertem SMTP (ml_pet_ für Transaktions-E-Mails)

Mail.Land akzeptiert die Anmeldung nur nach STARTTLS, Port 465 wird nicht angeboten. Wenn Ihre Anwendung 465 nutzt, stellen Sie auf 587 mit STARTTLS um. Nachrichten dürfen bis zu 15 MiB groß sein.

Dokumentation zum SMTP-Relay

Den API-Aufruf umstellen

Mailgun erwartet Formularfelder mit HTTP-Basic-Authentifizierung. Mail.Land erwartet einen JSON-Body mit dem Header X-API-Key. Hier sehen Sie dieselbe Nachricht in beiden APIs sowie einen Batch-Versand.

curl -s --user "api:$MAILGUN_API_KEY" \
  https://api.mailgun.net/v3/yourdomain.com/messages \
  -F from="Your Shop <[email protected]>" \
  -F to="Jane <[email protected]>" \
  -F subject="Order 12345 has shipped" \
  -F text="Your order is on its way." \
  -F html="<p>Your order is on its way.</p>" \
  -F h:Reply-To="[email protected]" \
  -F o:tag="order-shipped"
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 /v3/<domain>/messages zu POST /v1/transactional/send.

Feldzuordnung für den Sendeaufruf
MailgunMail.LandHinweis
--user api:<key> (Basic-Authentifizierung)X-API-Key: <key>Ein Header statt Basic-Authentifizierung und ein JSON-Body statt Formularfeldern.
fromfrom.email, from.nameTrennen Sie den Anzeigenamen von der Adresse. Die Adresse muss zu einer verifizierten Domain gehören.
toto[].email, to[].nameBis 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.
texttextContent
htmlhtmlContent
amp-htmlKeineEs gibt keinen AMP-Teil.
template, t:versiontemplateIdLegen Sie die Vorlage zuerst in Mail.Land neu an. Vorlagen haben keine Versionen.
t:variablesvariablesWerte für alle Empfänger, als JSON-Objekt statt als JSON-String.
v:<name> (metadata)tagsMail.Land kennt keine Schlüssel-Wert-Metadaten an Ereignissen. Übertragen Sie eine Kennung in tags oder in einem eigenen Header.
recipient-variablesto[].variablesWerte pro Empfänger. Für mehr als 5 Empfänger nutzen Sie send-batch mit einem Marketingschlüssel und recipients[].variables.
o:tagtagsEin Array von Strings.
h:<Header-Name>customHeadersEin Objekt aus Headernamen und -werten.
h:Reply-ToreplyToEin einfacher Adress-String.
attachment, inlineattachments[].fileName, contentType, content, contentId, inlineBase64-Inhalt in JSON statt Multipart-Dateien. Bis zu 10 Anhänge und insgesamt 10 MiB.
o:deliverytimescheduledAtDatum und Uhrzeit in UTC nach ISO 8601, bis zu 7 Tage im Voraus.
o:tracking-opens, o:tracking-clickstracking.opens, tracking.clicksBoolesche Werte. Die eigene Einstellung der Domain zum Öffnungs-Tracking hat Vorrang.
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 Mailgun 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 Mailgun.
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 Mailgun bis zum Abschluss des Umzugs und entfernen Sie sie erst, wenn die letzte Nachricht verschickt ist.

Dokumentation zur DNS-Einrichtung

Zuerst die Sperrlisten importieren

Mailgun führt Bounces, Beschwerden und Abmeldungen pro Absender-Domain. Exportieren Sie daher die Listen jeder Domain, von der Sie senden, zum Beispiel mit GET /v3/<domain>/bounces. Importieren Sie dann jede Liste mit passendem Typ und Geltungsbereich in Mail.Land, im Dashboard oder mit POST /v1/transactional/suppressions/import.

Zuerst die Sperrlisten importieren
Mailgun-ListeTyp in Mail.LandGeltungsbereich
BouncesHardBounceGlobal
Beschwerden (Complaints)ComplaintGlobal
Abmeldungen (alle E-Mails)UnsubscribeGlobal
Abmeldungen für ein Tag oder eine MailinglisteUnsubscribeMarketing; oder List, das nur für Kampagnen an die passende Mail.Land-Mailingliste gilt

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. Mailgun signiert Zeitstempel und Token mit einem kontoweiten Schlüssel; Mail.Land signiert Zeitstempel und Roh-Body mit einem Geheimnis pro Webhook. Passen Sie daher auch Ihren Prüfcode an.

Webhooks auf Mail.Land umstellen
Mailgun-EreignisMail.Land-EreignisHinweis
acceptedDerzeit keinemessage.sent ist noch nicht verfügbar; die Antwort 202 bestätigt die Annahme.
deliveredmessage.delivered
temporary_failmessage.deferred
permanent_failmessage.bouncedEine Ablehnung durch den empfangenden Server. message.failed meldet einen Abbruch auf Seiten von Mail.Land.
complainedmessage.complained
unsubscribedmessage.unsubscribedWird für die eigene Abmeldung des Empfängers gesendet, nicht für Änderungen, die Sie über die API vornehmen.
opened, clickedNoch nicht verfügbarÖffnungs- und Klick-Ereignisse sind im Katalog aufgeführt, werden heute aber nicht gesendet.

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
MailgunMail.Land
{{firstName}}{{firstName}}
%recipient.firstName%{{firstName}}
{{#if}}, {{#unless}}, {{#each}}, {{#with}}, {{#equal}}Keine
Vorlagenversionen (t:version)Keine

Mail.Land-Platzhalter sind schlicht: keine Bedingungen, Schleifen, Filter oder Partials. Verlagern Sie diese Logik in Ihre Anwendung oder führen Sie eine Vorlage pro Variante.

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 jeder Mailgun-Domain und importieren Sie sie.
  3. Legen Sie Ihre Vorlagen und Webhooks neu an.
  4. Legen Sie einen Sandbox-Schlüssel mit sandboxBehavior LogOnly an und führen Sie Ihre Integrationstests gegen Mail.Land aus, ohne E-Mails zuzustellen.
  5. Senden Sie echte Nachrichten an Adressen, die Sie kontrollieren, und prüfen Sie sie im E-Mail-Log.
  6. Verlagern Sie eine Anwendung oder einen kleinen Teil des Volumens und beobachten Sie Zustellung, Bounces und Beschwerden.
  7. Solange beide Anbieter laufen, halten Sie Abmeldungen in beide Richtungen synchron: Übertragen Sie neue Abmeldungen, Beschwerden und Bounces von Mailgun zu Mail.Land und von Mail.Land zu Mailgun, und synchronisieren Sie ein letztes Mal, bevor Sie das restliche Volumen verlagern.
  8. 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.
  9. Verlagern Sie dann den Rest und lassen Sie Mailgun aktiv, bis die letzten geplanten und wiederholten Nachrichten verschickt sind.

Mail.Land vs. Mailgun: der belegte Vergleich

Quellen

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

  1. [1]Mailgun-API: eine Nachricht sendenhttps://documentation.mailgun.com/docs/mailgun/api-reference/send/mailgun/messages/post-v3--domain-name--messagesgeprüft am 4. November 2026
  2. [2]Mailgun-API: Authentifizierunghttps://documentation.mailgun.com/docs/mailgun/api-reference/authenticationgeprüft am 4. November 2026
  3. [3]Mailgun: Versand per SMTPhttps://documentation.mailgun.com/docs/mailgun/user-manual/sending-messages/send-smtpgeprüft am 4. November 2026
  4. [4]Mailgun: Versand mit Vorlagenhttps://documentation.mailgun.com/docs/mailgun/user-manual/sending-messages/send-templatesgeprüft am 4. November 2026
  5. [5]Mailgun: Webhookshttps://documentation.mailgun.com/docs/mailgun/user-manual/webhooks/webhooksgeprüft am 4. November 2026
  6. [6]Mailgun: Webhooks absichernhttps://documentation.mailgun.com/docs/mailgun/user-manual/webhooks/securing-webhooksgeprüft am 4. November 2026
  7. [7]Mailgun-API: Bounceshttps://documentation.mailgun.com/docs/mailgun/api-reference/send/mailgun/bounces/get-v3--domainid--bouncesgeprüft am 4. November 2026

Häufige Fragen

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

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

Bei Mailgun kann ich eine US- oder EU-Region wählen. Wo läuft Mail.Land?

Bei Mail.Land gibt es keine Regionen zur Auswahl. Die Primärkopie Ihrer Daten liegt in Deutschland; die Anbieter außerhalb der EU stehen auf unserer DSGVO-Seite.

Wie sende ich an viele Empfänger auf einmal?

Verwenden Sie POST /v1/transactional/send-batch mit einem Marketingschlüssel (ml_pem_). Es nimmt bis zu 10.000 Empfänger mit jeweils eigenen Variablen an. Ein Transaktionsschlüssel nimmt bis zu 5 Empfänger pro Anfrage an.

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 Mailgun?

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