Leitfaden
Von SendGrid migrieren
Wechseln Sie von SendGrid zu Emailit. Konzepte, API-Felder, SMTP-Einstellungen und Namen im Event Webhook zuordnen, dann Sperrungen, Dynamic Templates und DNS übernehmen.
Diese Anleitung ordnet Konzepte, API-Aufrufe, Webhooks, Sperrungen und Vorlagen von SendGrid ihren Entsprechungen in Emailit zu. Lesen Sie zuerst Zu Emailit migrieren für die allgemeine Reihenfolge und den parallelen Betrieb beider Anbieter.
Konzepte
| SendGrid | Emailit |
|---|---|
| Konto und Subuser | Konto und Workspaces. Jeder Workspace hat eigene Domains, Schlüssel, Mitglieder und Credits. |
| API-Schlüssel mit Berechtigungen | API-Schlüssel: Full Access oder Sending Only, optional auf eine Domain beschränkt |
| Domain Authentication | Versanddomain mit Einträgen für SPF, DKIM und Return-Path |
| Link Branding | Tracking-Subdomain, ein CNAME wie go.acme.com |
| Single Sender Verification | Nicht verfügbar. Jede Absenderadresse muss auf einer verifizierten Domain liegen. |
| Dynamic Templates | Vorlagen mit Alias und Versionen, gerendert mit Temple |
| Event Webhook | Webhooks |
| Inbound Parse | Eingehende E-Mails |
| Suppressions | Sperrungen |
| Unsubscribe Groups | Nicht verfügbar. Verwenden Sie Kontaktlisten und Abmeldelinks in Kampagnen. |
| Marketing-Kontakte und -Listen | Kontakte und Kontaktlisten |
| Single Sends | Kampagnen |
| Email Activity | Email APIEmails und Email APILogs |
| Categories und Custom Args | meta |
| Dedizierte IPs und IP-Pools | Dedizierte IPs auf Anfrage |
| Validierung von E-Mail-Adressen | E-Mail-Verifizierung |
API-Aufrufe anpassen
Aus POST /v3/mail/send von SendGrid wird POST /v2/emails. Die Anfrage ist flacher: Es gibt keine personalizations, und Adressen sind einfache Strings.
curl https://api.sendgrid.com/v3/mail/send \
-H "Authorization: Bearer $SENDGRID_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"personalizations": [{ "to": [{ "email": "ada@example.com" }] }],
"from": { "email": "hello@acme.com", "name": "Acme" },
"subject": "Your receipt",
"content": [
{ "type": "text/plain", "value": "Thanks for your order." },
{ "type": "text/html", "value": "<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@acme.com>",
"to": "ada@example.com",
"subject": "Your receipt",
"text": "Thanks for your order.",
"html": "<p>Thanks for your order.</p>"
}'| SendGrid | Emailit |
|---|---|
Authorization: Bearer SG.… |
Authorization: Bearer secret_… |
from: { email, name } |
from: "Name <email>" |
personalizations[].to[] |
to, ein String oder ein Array mit bis zu 50 Adressen |
personalizations[].cc[], bcc[] |
cc, bcc |
reply_to: { email } |
reply_to |
subject |
subject |
content[] mit text/plain und text/html |
text und html |
template_id |
template, eine Vorlagen-ID oder ein Alias |
personalizations[].dynamic_template_data |
variables |
attachments[] mit content, filename, type, content_id |
attachments[] mit content, filename, content_type, content_id oder einer url statt content |
headers |
headers |
custom_args, categories |
meta, ein Objekt aus String-Werten, das in Webhook-Events zurückgegeben wird |
send_at (Unix-Zeit) |
scheduled_at, das dieselbe Unix-Zeit, ISO 8601 oder englischen Klartext akzeptiert |
tracking_settings.open_tracking und click_tracking |
tracking: { "loads": true, "clicks": true } |
asm (Unsubscribe Groups) |
Nicht verfügbar |
202 Accepted mit einem Header X-Message-Id |
200 mit einem JSON-Body: id, status: "accepted" und ids mit einer ID pro Empfänger |
Jeder Empfänger in einer Anfrage an Emailit wird zu einer eigenen E-Mail mit eigener ID. Um unterschiedlichen Personen unterschiedliche Variablen zu senden, was SendGrid mit mehreren personalizations erledigt, senden Sie eine Anfrage pro Empfänger. Fügen Sie einen Header Idempotency-Key hinzu, damit Wiederholungen sicher sind. Siehe E-Mail senden.
SMTP-Einstellungen umstellen
| Einstellung | SendGrid | Emailit |
|---|---|---|
| Host | smtp.sendgrid.net |
smtp.emailit.com |
| Port | 587, 465, 2525 oder 25 |
587 (STARTTLS), 465 (TLS), 2525, 2587 oder 25 |
| Benutzername | apikey |
emailit |
| Passwort | Ihr SendGrid-API-Schlüssel | Ihr Emailit-API-Schlüssel |
Emailit liest den Header X-SMTPAPI nicht. Entfernen Sie ihn und legen Sie das Tracking stattdessen bei der Domain fest. Siehe SMTP-Einstellungen.
Webhook-Events zuordnen
| SendGrid-Event | Emailit-Event |
|---|---|
processed |
email.accepted (nur API) |
deferred |
email.attempted |
delivered |
email.delivered |
bounce |
email.bounced |
dropped |
email.suppressed, wenn der Empfänger auf der Sperrliste steht |
open |
email.loaded |
click |
email.clicked |
spamreport |
email.complained |
unsubscribe, group_unsubscribe |
email.unsubscribed, nur für Kampagnen-E-Mails |
| POST von Inbound Parse | email.received, dann den Inhalt mit GET /emails/{id} abrufen |
Wie SendGrid sendet Emailit ein JSON-Array von Events. Die Felder unterscheiden sich:
- Der Event-Name steht in
typeund die E-Mail indata.object. Verwenden Siedata.object.id(dieem_-ID aus der Antwort auf den Versand) stattsg_message_idunddata.object.tostattemail. - Ihre
meta-Werte kommen indata.object.metazurück. - Emailit signiert Anfragen mit HMAC-SHA256 statt mit dem öffentlichen ECDSA-Schlüssel von SendGrid. Verifizieren Sie
X-Emailit-Signaturemit 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 in SendGrid Ihre Bounces, Spam Reports, Invalid Emails und Global Unsubscribes, über die Suppression-Seiten oder mit den API-Endpunkten
/v3/suppression/*. Blocks sind meist vorübergehend, Sie können sie also weglassen. -
Erstellen Sie eine CSV-Datei mit den Spalten
email,type,reason:email,type,reason old-address@example.com,recipient,sendgrid bounce angry@example.com,recipient,sendgrid spam reportVerwenden 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, teilen Sie größere Listen also auf. Duplikate werden übersprungen.
Importieren Sie Personen, die sich über Gruppen von Marketing-E-Mails abgemeldet haben, als Kontakte mit gesetztem unsubscribed, statt sie für alle E-Mails zu sperren. Siehe Sperrungen verwalten.
Vorlagen umziehen
Exportieren Sie das HTML jedes Dynamic Template aus SendGrid und importieren Sie es dann unter Email MarketingTemplates oder erstellen Sie die Vorlage mit der Vorlagen-API. Geben Sie jeder Vorlage einen Alias, etwa receipt, und senden Sie sie mit "template": "receipt".
Beide verwenden doppelte geschweifte Klammern, aber Temple ist kleiner als Handlebars:
| SendGrid (Handlebars) | Emailit (Temple) |
|---|---|
{{first_name}} |
{{first_name}} |
{{{html_block}}} |
{{html_block}}. Temple maskiert HTML nie, maskieren Sie Benutzereingaben also selbst. |
{{insert name "default=there"}} |
{{name|"there"}} |
{{#if plan}}…{{else}}…{{/if}} |
Identisch |
{{#each items}}…{{/each}} |
Nicht unterstützt. Rendern Sie die Liste in Ihrem Code und übergeben Sie sie als eine Variable. |
{{#equals plan "pro"}}…{{/equals}} |
Nicht unterstützt. Übergeben Sie einen Boolean wie is_pro und verwenden Sie {{#if is_pro}}. |
Siehe Temple und Vorlagen importieren und exportieren.
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 nicht mit den CNAMEs für Domain Authentication oder Link Branding von SendGrid. Behalten Sie Ihren DMARC-Eintrag. Entfernen Sie nach der Umstellung die CNAMEs von SendGrid. Siehe DNS-Einträge.
Wenn Sie Inbound Parse genutzt haben, richten Sie den MX-Eintrag Ihres Parse-Hostnamens stattdessen auf Emailit. Um denselben Hostnamen zu behalten, etwa parse.acme.com, setzen Sie den inbound_key der Domain per API auf parse. 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