Zur Dokumentation springen
Wissensdatenbank

Von Mailgun wechseln

Behalten Sie das Mailgun-SDK und senden Sie über OpenEmail. Ändern Sie seine Basis-URL und seinen Schlüssel, und Ihr Sendecode bleibt, wie er ist.

Was Sie ändern

Richten Sie das SDK auf https://api.openemail.uk/compat/mailgun aus und geben Sie ihm statt des Mailgun-Schlüssels einen OpenEmail-API-Schlüssel mit der Berechtigung emails:send. Er dient als Passwort derselben HTTP-Basic-Anmeldung, und der Benutzername wird nicht geprüft. Die Domain im Pfad muss eine Domain des Workspace sein, und die From-Adresse entscheidet, ob eine Nachricht hinausgehen darf, wie überall in OpenEmail.

import formData from 'form-data'import Mailgun from 'mailgun.js' const mailgun = new Mailgun(formData)const mg = mailgun.client({  username: 'api',  key: process.env.OPENEMAIL_API_KEY,  url: 'https://api.openemail.uk/compat/mailgun',}) await mg.messages.create('acme.com', {  from: 'Acme Billing <[email protected]>',  to: ['[email protected]'],  subject: 'Your invoice',  html: '<p>Your invoice is attached.</p>',})

In Ruby ist das zweite Argument Host und Pfad ohne Schema. In PHP behält das SDK vom übergebenen Endpunkt nur den Host, deshalb kommt der Pfad über AddPathPlugin aus php-http hinzu, das das SDK bereits installiert. Das offizielle Python-Paket protokolliert unter Umständen eine Warnung, dass der Host nicht der von Mailgun ist, und sendet trotzdem. Es wiederholt außerdem Anfragen, die mit 429 oder einem 5xx scheiterten, deshalb antwortet OpenEmail mit 400 statt 5xx, sobald ein Teil eines Batches hinausgegangen ist.

Was worauf abgebildet wird

Bedient wird der Endpunkt POST /v3/{domain}/messages, als multipart/form-data, das Anhänge brauchen, oder als application/x-www-form-urlencoded. Ein Feldname, der auf [] endet, wird ohne diese Endung gelesen.

MailgunIn OpenEmail
fromDer Absender mit seinem Namen.
toEmpfänger, wiederholt oder durch Kommas getrennt. Zusammen mit cc und bcc bis zu 50 pro Nachricht.
subjectDer Betreff.
htmlDer HTML-Teil. text wird zum Textteil, und einer der beiden oder template ist Pflicht.
attachmentDateien, höchstens 20 und zusammen 5 MB.
inlineEin Bild, das das HTML mit seinem Dateinamen als cid: verwendet, wird an seiner Stelle eingebettet. Jede andere Inline-Datei kommt als gewöhnlicher Anhang an.
o:tagTags namens tag, tag_2 und so weiter, jeder mit einem Tag.
v:Jede Variable wird ein Tag mit ihrem Namen und Wert. Zusammen mit o:tag höchstens 10 pro Nachricht.
o:deliverytimeEin geplanter Versand, bis zu ein Jahr im Voraus. Ein bereits vergangener Zeitpunkt sendet sofort.
o:trackingSchaltet zusammen mit o:tracking-clicks und o:tracking-opens das Tracking für die Nachricht ein oder aus. htmlonly zählt als ein.
o:testmodeyes verbucht die Nachricht als gesendet, ohne sie zuzustellen, wie es ein oe_test_-Schlüssel tut.
h:Reply-ToDie Reply-To-Adresse. Jedes andere h:-Feld wird ein eigener Header: X-*, List-*, Precedence, Auto-Submitted, Importance, Priority und Feedback-ID.
recipient-variablesEin Batch-Versand. Jede to-Adresse bekommt eine eigene Nachricht, in der %recipient.key% aus ihren Variablen und %recipient% mit ihrer Adresse gefüllt wird, und cc und bcc stehen auf jeder davon. Ein Platzhalter ohne Wert bleibt, wie er ist.
templateDer Slug oder die ID (tpl_...) einer OpenEmail-Vorlage, ausgefüllt aus t:variables, sonst aus h:X-Mailgun-Variables. t:version wählt eine Version über ihre Nummer.

Was abgelehnt wird, und warum

  • Ein template zusammen mit html oder text, weil eine OpenEmail-Vorlage den gesamten Inhalt liefert, und ein t:version, das keine Versionsnummer ist.
  • o:deliverytime-optimize-period und o:time-zone-localize, weil OpenEmail keinen Sendezeitpunkt je Empfänger wählt. Andere h:X-Mailgun--Header, die Anweisungen an Mailgun sind: Verwenden Sie stattdessen die passende o:-Option.
  • amp-html für sich allein. Neben html oder text bleibt es weg, weil diese die Nachricht ohnehin tragen.
  • Mehr als eine Reply-To-Adresse, mehr als 10 Tags, ein Tag-Name aus anderen Zeichen als Buchstaben, Ziffern, _ und - sowie ein Batch mit mehr als 100 Empfängern. Mailgun nimmt 1.000, teilen Sie größere Batches also auf.

o:dkim, o:require-tls, o:skip-verification, o:sending-ip, o:sending-ip-pool, o:tracking-pixel-location-top, o:archive-to, o:deliver-within und t:text werden angenommen und ändern nichts.

Antworten und Fehler

  • Ein Versand antwortet mit 200, der Meldung Queued. Thank you. und einer id: der OpenEmail-Nachrichten-ID in spitzen Klammern, die GET /emails/{id} und Webhooks ohne diese verwenden. Ein Batch-Versand erzeugt eine Nachricht pro Empfänger, jede mit eigener ID, und antwortet mit der ersten. Ein Header Idempotency-Key funktioniert wie im Rest der API.
  • Ein fehlender oder unbekannter Schlüssel antwortet mit 401 und dem reinen Text Forbidden, eine Domain, die der Workspace nicht hat, mit 404 und Domain not found. Alles andere kommt als message zurück: 400 für eine Nachricht, die nicht gesendet werden kann, 403 für einen Schlüssel ohne emails:send, eine From-Adresse, die der Schlüssel nicht verwenden darf, eine Domain, die noch nicht senden kann, oder einen Workspace, der sein Versandkontingent aufgebraucht hat, und 413 für einen Body über 25 MB oder Anhänge über 5 MB.
  • Scheitert ein Empfänger eines Batches, nachdem andere angenommen wurden, nennt der Fehler die bereits gesendeten Nachrichten und antwortet mit 400, damit ein SDK, das Anfragen wiederholt, sie nicht doppelt sendet.