Product

E-Mail-Versand mit der Mailgun-PHP-API

Das Mailgun-PHP-SDK gibt es nun schon eine ganze Weile, und wir haben viele Änderungen erlebt: neue Funktionen, neue darauf aufbauende Integrationen, neue API-Endpunkte … doch der Kern von PHP ist gleich geblieben. Da es das erste SDK für die Mailgun-API war, hatte es Zeit zu reifen und verschiedene Iterationen zu durchlaufen, die die Nutzung vereinfachen – was wir beim Ausprobieren feststellen konnten.
Bild für E-Mail-Versand mit der Mailgun-PHP-API

Dies ist ein Gastbeitrag von Mihály Sáróy, Developer bei EDMdesigner.

Das Mailgun-PHP-SDK gibt es nun schon eine ganze Weile, und wir haben viele Änderungen erlebt: neue Funktionen, neue Integrationen , die darauf aufbauen, neue API-Endpunkte… doch der Kern von PHP ist gleich geblieben. Da es das erste SDK für die Mailgun-API war, hatte es Zeit zu reifen und verschiedene Iterationen zu durchlaufen, die die Nutzung vereinfachen – was wir beim Ausprobieren feststellen konnten.

In diesem Beitrag zeigen wir Ihnen, wie Sie die Mailgun-API über PHP mit PEAR implementieren.

Warum eine PHP-E-Mail-API für Transaktions-E-Mails nutzen? 

Zu Beginn dieser Anleitung möchten wir betonen, dass Transaktions-E-Mails allgegenwärtig sind und es wichtig ist, den Versand richtig aufzusetzen. Funktioniert der E-Mail-Versand nicht reibungslos, kann dies zu Umsatzeinbußen für Ihr Unternehmen führen und sorgt allgemein für ein unangenehmes Erlebnis bei Ihrer Kundschaft.

In der Entwicklung sucht man stets nach dem einfachsten (und zeiteffizientesten) sowie leistungsstärksten Weg, um ein Problem zu lösen. Dies gelingt oft, indem man zwei Bedingungen erfüllt:

  1. Verwendung externer Bibliotheken, die zur jeweiligen Lösung passen.
  2. Entwurf skalierbarer Anwendungen.

Die erste Bedingung muss wohl nicht näher erläutert werden – schließlich schreiben Sie auch kein komplett neues Betriebssystem, bevor Sie mit dem Coding einer Anwendung beginnen, oder? In diesem Beitrag sehen wir uns an, wie vorgefertigte Pakete für den E-Mail-Versand genutzt werden. Doch kommen wir nun zum zweiten Punkt: Lesen Sie weiter. 

Für ein skalierbares Design kommen Dienste wie Mailgun ins Spiel. Sie erwartet eine funktionsreiche Lösung, die den Anforderungen für den E-Mail-Versand mit hohem Volumen gerecht wird.

Wenn Ihnen die Zustellung wichtig ist (und das sollte sie sein), bietet Mailgun eine hohe Zuverlässigkeit, da es speziell für die optimale Abwicklung von Transaktions-E-Mails entwickelt wurde. Richten Sie mehrere Domains ein und wählen Sie, ob Sie geteilte IP-Adressen nutzen oder eine eigene Reputation aufbauen möchten. Zum Schutz Ihrer E-Mail-Kopfzeilen verlangt Mailgun, DKIM  genannt, und SPF dem Konto hinzugefügt werden und die Prüfungen auf Authentifizierungs- und Abgleichsebene bestehen. All diese Aspekte greifen ineinander, um Sie bei der E-Mail-Zustellung zu unterstützen.

Kommen wir nun zum spannenden Teil: der Einrichtung eines PHP-Wrapper-Skripts für Mailgun. Zunächst verwenden wir den Paketmanager und sehen uns dann Beispiele für die Anwendung an.

Einrichtung der PHP-Umgebung für die Mailgun-E-Mail-API 

PEAR ist eine von der Community getragene Initiative, die es uns ermöglicht, PHP-Code-Komponenten wiederzuverwenden, während auch der abhängige Code hinzugefügt und gepflegt wird.

Zunächst benötigen Sie PHPsowie den Paketmanager, um fortzufahren. Am besten installieren Sie diese über den Debian Advanced Package Manager (APT) , falls Sie Linux verwenden.

Obwohl PEAR eine etwas ältere Lösung ist, ist sie immer noch weit verbreitet und steht für PHP Extension and Application Repository. Je nach installierter PHP-Version ist PEAR wahrscheinlich bereits bei Ihnen verfügbar. Überprüfen Sie dies, indem Sie den Befehl pear ohne Argumente ausführen. Wenn Sie eine Warnung erhalten, dass es auf Ihrem System fehlt, führen Sie einfach Folgendes aus: sudo apt install php-pear. Nun sind wir bereit, PHP-Code von Drittanbietern mit PEAR zu installieren.

Wenn Sie diesem Artikel folgen und das Coding direkt mitmachen, ist dies der Punkt, an dem Sie Ihr Mailgun-Konto öffnen sollten, um Zugriff auf die API zu haben. Wenn Sie nicht weiterkommen, werfen Sie einfach einen Blick auf diese Tipps für den Einstieg.

Erstellung eines PHP-Projekts für den E-Mail-Versand mit der Mailgun-API 

Die Schritte mit PEAR sehen wie folgt aus:

  1. Installation von Projektabhängigkeiten und Einbindung der Pakete durch Anfordern der Hauptklasse oder des Skripts vendor/autoloader.php
  2. Bereitstellung API-bezogener Anmeldeinformationen, wie API-Schlüssel und Domain-Informationen 
  3. Instanziierung der Mail-Klasse / des Mail-Clients
  4. Ausführung des Funktionsaufrufs, um die E-Mail(s) zu versenden

Ganz einfach, oder?

Nutzung von PEAR für den E-Mail-Versand mit PHP über die Mailgun-E-Mail-API

Schritt 1: Projektabhängigkeiten installieren

Wir können das Mail-Paket installieren, indem wir den entsprechenden Befehl eingeben: sudo pear install Mail. Nach Abschluss der Installation muss es im nächsten Schritt in eine Skript-Datei in Ihrem Projektverzeichnis eingebunden werden:

require_once "Mail.php";

Sparen Sie sich etwas Zeit und folgen Sie der Vorlage, um anschließend die API-spezifischen Variablen anzugeben. 

Schritt 2: Eingabevariablen bereitstellen

Wenn Sie zu Ihrem API-Dashboard navigieren, finden Sie diese notwendigen Informationen unter dem Tab für die Domain:

Tab on Mailgun app domain settings

Wir benötigen die Variablen für hostaccount user und password sowie den zu verwendenden port:

Wir verwenden eine SMTP-Verbindung, um E-Mails über unser Mailgun-Konto zu versenden.

Schritt 3: Client instanziieren

Wir fassen die oben genannten Parameter in einem Array zusammen und instanziieren damit die Mail-Klasse:

Schritt 4: Client aufrufen

Der letzte Schritt ist der Aufruf der Methode send() der Mail-Klasse, und schon kann es losgehen:

Hierbei enthält die Variable $to den Wert für die Empfängeradresse, während die Variable $headers ein Array ist, das zusätzliche Felder für die Zustellung enthält.

An dieser Stelle möchten Sie sich vielleicht das fertige Coding ansehen:

Laden Sie den vollständigen Quellcode hier herunter.

Wenn Sie alles eingerichtet haben, versuchen Sie, das Skript auszuführen: php mailer.php.

Sie führen es aus und erhalten einen unschönen Fehler-Stacktrace. Sehen wir uns das genauer an:

PHP Fatal error: Uncaught Error: Class 'Net_SMTP' not found in /usr/share/php/Mail/smtp>php:366.

Dies bedeutet, dass wir vergessen haben, eine weitere Projektabhängigkeit hinzuzufügen, die für die Nutzung von PEAR Mail erforderlich ist. Führen Sie sudo pear install Net_SMTP aus und versuchen Sie es erneut.

Die Ausgabe lautet:

Message sent successfully!

Wenn Sie alle Schritte mitgemacht haben, sollte Ihre Nachricht im angegebenen Postfach angekommen sein, und wir gratulieren Ihnen dazu. Hervorragend. 

PHP-Funktion mail() 

Die native PHP-Funktion mail() kann Nachrichten aus Ihrer App versenden, bringt jedoch einige Nachteile mit sich. Da sie vom lokalen E-Mail-Setup Ihres Servers abhängt, landen so versendete E-Mails oft im Spamfilter oder werden direkt blockiert. Zudem fehlen moderne Grundlagen wie Tracking, Analysen und zuverlässige Funktionen für die Zustellbarkeit. Besonders kritisch ist, dass einfache Implementierungen Sie anfällig für Header-Injection-Angriffe machen können. Kurz gesagt: mail() funktioniert zur Not, aber für produktive E-Mails empfiehlt sich eine spezialisierte API wie das PHP-SDK von Mailgun. 

Welche Nachteile hat die Verwendung der PHP-Funktion mail()? 

  • Zustellbarkeit: Nachrichten hängen vom lokalen E-Mail-Setup Ihres Servers ab, dem es oft an einem ordnungsgemäßen Abgleich von SPF, DKIM und DMARC mangelt. Dies verschlechtert die Absenderreputation und verringert die Platzierung im Posteingang. 
  • Spam-Risiko: E-Mails von Webservern werden häufig von Filtern markiert oder abgelehnt, die generischen Server-IPs und fehlender Authentifizierung misstrauen. 
  • Keine SMTP-Authentifizierung: mail() bietet standardmäßig keinen Support für authentifiziertes SMTP. Sie müssen Konfigurationen manuell erstellen oder eine andere Bibliothek verwenden, um über ein ordnungsgemäßes SMTP-Relay zu versenden. 
  • Kein Tracking oder Analysen: Es gibt keine integrierte Möglichkeit, um Öffnungen, Klicks, Bounces oder Beschwerden nachzuverfolgen, sowie keine Event-Webhooks für die programmgesteuerte Überwachung. 

Für eine zuverlässige Zustellung, Authentifizierung und Analysen nutzen Sie einen speziellen Dienst wie die Mailgun-PHP-API. 

Fazit zur PHP-E-Mail-API: Nächste Schritte und Ressourcen 

Wir haben das Beispielskript für den Einstieg in die Nutzung von Mailgun mit dem PEAR-Paketmanager kennengelernt und PHP-Skripte erstellt, um eine E-Mail über SMTP und die HTTP-API zu versenden. Durch angemessenes Testen stellen Sie sicher, dass Ihre E-Mail-Zustellung wie erwartet funktioniert. Es gibt jedoch noch weitere Optionen, falls PEAR nicht Ihre bevorzugte Wahl ist. Mit Alternativen wie SendGrid können Sie dasselbe Ergebnis mit Composer erzielen. Mailgun ist hierauf bereits ausführlich im Blog eingegangen. Für eine tiefergehende Anleitung lesen Sie unser Tutorial zur Implementierung der Mailgun-API mit PHP. 

Und wenn Sie Ihre Skills in PHP verbessern möchten, finden Sie hier einige meiner bevorzugten Ressourcen, die ich für den E-Mail-Versand mit PHP und den Umgang mit E-Mail-HTML im Allgemeinen empfehlen würde. 

FAQs

Nutzen Sie das PHP-SDK von Mailgun (Installation via Composer) und rufen Sie den Endpunkt für Nachrichten auf. Eine API-Anfrage ist in der Regel schneller einzurichten und zuverlässiger als die Konfiguration eines lokalen SMTP-Servers für den E-Mail-Versand mit PHP.

Eine E-Mail-API für PHP bietet Ihnen authentifizierte Anfragen, eine bessere Zustellbarkeit, erneute Versuche, Webhooks und Analysen. Sie vermeiden die Spam-Risiken und die bei mail() häufig auftretenden Probleme mit der Serverkonfiguration.

Authentifizieren Sie sich mit Ihrem API-Schlüssel über HTTPS. In PHP legen Sie den Schlüssel als Umgebungsvariable fest und initialisieren damit den Mailgun-Client. Es ist kein SMTP-Nutzername oder Passwort erforderlich.

Ja. Legen Sie HTML- und Text-Bodies fest, hängen Sie Dateien an und rendern Sie Vorlagen mit Variablen, was ideal ist, wenn Sie E-Mails mit PHP versenden möchten, die professionell aussehen und skalierbar sind.

Aktivieren Sie das Tracking in Ihren Mailgun-Domain-Einstellungen oder in den Parametern pro Nachricht und verarbeiten Sie dann Ereignisse via Webhooks oder die Events API aus Ihrer PHP-App für Analysen in Echtzeit.

  1. 401/403: Falscher API-Schlüssel oder falsche Domain-Region 
  2. 400: Fehlende Felder (from, to, subject, text/html). 
  3. 429: Rate Limiting: Setzen Sie Anforderungen in eine Warteschlange oder warten Sie vor erneuten Versuchen. Validieren Sie Ihre Domain (SPF/DKIM), um die Zustellung zu verbessern und Soft Bounces zu reduzieren. 

Abstrahieren Sie Ihre Sendefunktion, ersetzen Sie den Aufruf von mail() durch eine Anfrage über den Mailgun-Client und fügen Sie die Domain-Authentifizierung hinzu (SPF/DKIM/DMARC). Sie profitieren von einer besseren Zustellbarkeit, Tracking und Fehlertransparenz bei minimalen Änderungen am Coding.