Leitfaden
Von Mailgun migrieren
Wechseln Sie von Mailgun zu Emailit. Domains, Schlüssel und Routes zuordnen, formularkodierte API-Aufrufe in JSON umwandeln und SMTP, Webhooks, Sperrungen und Vorlagen umziehen.
Diese Anleitung ordnet Konzepte, API-Aufrufe, Webhooks, Sperrungen und Vorlagen von Mailgun ihren Entsprechungen in Emailit zu. Lesen Sie zuerst Zu Emailit migrieren für die allgemeine Reihenfolge und den parallelen Betrieb beider Anbieter.
Konzepte
| Mailgun | Emailit |
|---|---|
| Konto und Unterkonten | Konto und Workspaces. Jeder Workspace hat eigene Domains, Schlüssel, Mitglieder und Credits. |
Domain mit eigenem API-Pfad /v3/<domain>/… |
Versanddomain. Es gibt einen einzigen Sende-Endpunkt, und Emailit entnimmt die Domain der Adresse in from. |
| Private API key | API-Schlüssel mit Full Access |
| Domain sending key | API-Schlüssel mit Sending Only, auf eine Domain beschränkt |
| SMTP-Zugangsdaten pro Domain | Ihr API-Schlüssel, als SMTP-Passwort verwendet |
| Vorlagen pro Domain, mit Versionen | Vorlagen pro Workspace, mit Alias und Versionen |
| Webhooks pro Domain | Webhooks pro Workspace |
| Routes | Eingehende E-Mails mit dem Webhook email.received oder die Automatisierung Forward received email |
| Sperrungen pro Domain: Bounces, Abmeldungen, Beschwerden | Eine Sperrliste pro Workspace |
| Mailinglisten | Kontaktlisten |
| Tags und eigene Variablen | meta |
| Logs und Events | Email APIEmails, Email APIEvents und Email APILogs |
| E-Mail-Validierung | E-Mail-Verifizierung |
API-Aufrufe anpassen
POST /v3/<domain>/messages von Mailgun nimmt Formularfelder mit Basic Authentication an. POST /v2/emails von Emailit nimmt JSON mit einem Bearer-Token an:
curl -s --user "api:$MAILGUN_API_KEY" \
https://api.mailgun.net/v3/mg.acme.com/messages \
-F from='Acme <hello@mg.acme.com>' \
-F to='ada@example.com' \
-F subject='Your receipt' \
-F text='Thanks for your order.' \
--form-string html='<p>Thanks for your order.</p>'curl https://api.emailit.com/v2/emails \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "Acme <hello@mg.acme.com>",
"to": "ada@example.com",
"subject": "Your receipt",
"text": "Thanks for your order.",
"html": "<p>Thanks for your order.</p>"
}'| Mailgun | Emailit |
|---|---|
Basic Auth api:<key> |
Authorization: Bearer secret_… |
Felder in multipart/form-data |
Ein JSON-Body |
from, subject, text, html |
Dieselben Namen |
to, cc, bcc (wiederholt oder durch Kommas getrennt) |
to, cc, bcc als String oder Array mit jeweils bis zu 50 |
h:Reply-To |
reply_to |
h:X-My-Header |
headers: { "X-My-Header": "…" } |
v:order-id, h:X-Mailgun-Variables |
meta: { "order-id": "…" }, in Webhook-Events zurückgegeben |
template und t:variables |
template (eine ID oder ein Alias) und variables |
attachment, inline (Datei-Uploads) |
attachments[] mit Base64-kodiertem content oder einer url, dazu content_type. Fügen Sie für eingebettete Bilder content_id hinzu. |
o:deliverytime (Datum nach RFC 2822) |
scheduled_at (ISO 8601, Unix-Zeit oder englischer Klartext) |
o:tracking, o:tracking-opens, o:tracking-clicks |
tracking: { "loads": true, "clicks": true } |
o:tag |
meta |
o:testmode |
Nicht verfügbar |
recipient-variables (Batch-Versand) |
Nicht verfügbar. Senden Sie pro Empfänger eine Anfrage mit eigenen variables. |
Antwort { "id": "<…>", "message": "Queued. Thank you." } |
200 mit id (em_…), message_id, status: "accepted" und ids pro Empfänger |
Wenn Sie von einer Subdomain wie mg.acme.com gesendet haben, fügen Sie genau diese Subdomain in Emailit hinzu. Subdomains werden getrennt von der übergeordneten Domain verifiziert. Die EU- und US-API-Hosts von Mailgun entsprechen beide dem einen Endpunkt von Emailit. Siehe E-Mail senden.
SMTP-Einstellungen umstellen
| Einstellung | Mailgun | Emailit |
|---|---|---|
| Host | smtp.mailgun.org oder der EU-Host |
smtp.emailit.com |
| Port | 587, 465, 2525 oder 25 |
587 (STARTTLS), 465 (TLS), 2525, 2587 oder 25 |
| Benutzername | Ihr SMTP-Login, etwa postmaster@mg.acme.com |
emailit |
| Passwort | Ihr SMTP-Passwort | Ihr Emailit-API-Schlüssel |
Emailit liest keine X-Mailgun-*-Header. Entfernen Sie sie und legen Sie das Tracking stattdessen bei der Domain fest. Siehe SMTP-Einstellungen.
Webhook-Events zuordnen
| Mailgun-Event | Emailit-Event |
|---|---|
accepted |
email.accepted (nur API) |
delivered |
email.delivered |
failed mit Schweregrad temporary |
email.attempted |
failed mit Schweregrad permanent |
email.bounced |
opened |
email.loaded |
clicked |
email.clicked |
complained |
email.complained |
unsubscribed |
email.unsubscribed, nur für Kampagnen-E-Mails |
| Route, die an eine URL weiterleitet | email.received, dann den Inhalt mit GET /emails/{id} abrufen |
Das Anfrageformat ändert sich:
- Mailgun sendet ein Event pro Anfrage, mit den Details in
event-data. Emailit sendet ein JSON-Array mit bis zu 100 Events. Iterieren Sie über das Array. - Der Event-Name steht in
typeund die E-Mail indata.object. Verwenden Siedata.object.id, dieem_-ID aus der Antwort auf den Versand, um Events Nachrichten zuzuordnen. Ihremeta-Werte stehen indata.object.meta. - Mailgun signiert einen Zeitstempel und ein Token im Body. Emailit signiert den gesamten unveränderten Body: 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 Listen Bounces, Complaints und Unsubscribes jeder Mailgun-Domain, von der Sie senden, im Control Panel oder mit der Suppressions-API (
/v3/<domain>/bounces,/complaintsund/unsubscribes). -
Erstellen Sie eine CSV-Datei mit den Spalten
email,type,reason:email,type,reason old-address@example.com,recipient,mailgun bounce angry@example.com,recipient,mailgun complaintVerwenden Sie den Typ
recipientfür Adressen, die nie E-Mails erhalten dürfen. Er blockiert Versände per API, SMTP und Kampagne. Die Typenbounce,complaintundunsubscribestoppen nur Kampagnen. -
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.
Emailit hat eine Sperrliste pro Workspace, daher kommen die Adressen aller Ihrer Mailgun-Domains in dieselbe Liste. Eine Allowlist gibt es nicht. Siehe Sperrungen verwalten.
Vorlagen umziehen
Kopieren Sie das HTML jeder Vorlage aus Mailgun und importieren Sie es dann unter Email MarketingTemplates oder erstellen Sie die Vorlage mit der Vorlagen-API. Geben Sie ihr einen Alias und senden Sie sie mit "template": "<alias>" und variables.
Mailgun-Vorlagen verwenden Handlebars. Temple deckt die üblichen Teile ab:
| Mailgun (Handlebars) | Emailit (Temple) |
|---|---|
{{first_name}} |
{{first_name}} |
{{{html_block}}} |
{{html_block}}. Temple maskiert HTML nie, maskieren Sie Benutzereingaben also selbst. |
{{#if plan}}…{{else}}…{{/if}} |
Identisch |
{{#unless plan}}…{{/unless}} |
{{#if plan}}{{else}}…{{/if}} |
{{#each items}}…{{/each}} |
Nicht unterstützt. Rendern Sie die Liste in Ihrem Code und übergeben Sie sie als eine Variable. |
{{#equal plan "pro"}}…{{/equal}} |
Nicht unterstützt. Übergeben Sie einen Boolean wie is_pro und verwenden Sie {{#if is_pro}}. |
| Kein eingebauter Standardwert | {{first_name|"there"}} fügt einen Ersatzwert hinzu |
Siehe Temple und Vorlagen importieren und exportieren.
DNS ändern
Fügen Sie jede 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 Mailgun noch mit dessen Tracking-CNAME email.<domain>. Ihren SPF-Eintrag auf der Hauptdomain müssen Sie für Emailit nicht ändern. Behalten Sie Ihren DMARC-Eintrag. Siehe DNS-Einträge.
Entfernen Sie nach der Umstellung die DKIM- und Tracking-Einträge von Mailgun und entfernen Sie include:mailgun.org aus Ihrem SPF-Eintrag. Wenn Sie E-Mails über Routes von Mailgun empfangen, behalten Sie dessen MX-Einträge, bis Sie diesen Verkehr auf eingehende E-Mails bei Emailit umgestellt haben, die auf einer Subdomain wie inbound.acme.com empfangen.
Nächste Schritte
- Go-live-Checkliste
- Webhook einrichten
- Priority migration: Lassen Sie Engineers von Emailit den Umzug gemeinsam mit Ihnen erledigen