{"id":19771,"date":"2025-06-11T00:00:00","date_gmt":"2025-06-11T00:00:00","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\/"},"modified":"2026-09-14T15:14:12","modified_gmt":"2026-09-14T15:14:12","slug":"transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\/","title":{"rendered":"Erstellen von Transaktions-E-Mail-Workflows f\u00fcr Versandbenachrichtigungen mit der Mailgun-API"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Wenn Sie etwas online bestellen, erwarten Sie, dass Sie genau wissen, wo es sich befindet und wann es ankommt. Transaktions-E-Mail-Workflows machen diese Art der zeitnahen Kommunikation m\u00f6glich.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Im Gegensatz zu Marketing-E-Mails, die Produkte bewerben, werden Transaktions-E-Mails als Reaktion auf die Aktion eines Nutzers gesendet, wie zum Beispiel die Aufgabe einer Bestellung oder der Erhalt eines Versand-Updates. Sie liefern Details in Echtzeit, die Nutzer auf jedem Schritt des Weges auf dem Laufenden halten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In diesem Artikel erfahren Sie, wie Sie einen Transaktions-E-Mail-Workflow f\u00fcr Versandbenachrichtigungen mithilfe von  <a href=\"https:\/\/documentation.mailgun.com\/\" target=\"_tabs\" rel=\"noopener noreferrer\">der Mailgun-API<\/a>.  erstellen. Der Workflow integriert  <a href=\"https:\/\/docs.bullmq.io\/\" target=\"_tabs\" rel=\"noopener noreferrer\">BullMQ<\/a>, ein leistungsstarkes Job-Queue-System, um E-Mail-Benachrichtigungen getrennt von der Hauptanwendungslogik in die Warteschlange zu stellen und zu verarbeiten, was die Skalierbarkeit und Leistung verbessert. Dies ist n\u00fctzlich f\u00fcr Anwendungen mit hohem Datenaufkommen, bei denen der direkte E-Mail-Versand innerhalb eines Anfrage-Antwort-Zyklus das System verlangsamen k\u00f6nnte.<\/p>\n\n\n\r\n    <nav data-content-type=\"longform\" class=\"toc-block longform-spacings px-5 py-6 px-md-6 px-lg-7 py-md-7 bg-light fs-sm rounded-lg\" aria-labelledby=\"toc-title-5318\"><p class=\"h5 m-0\" id=\"toc-title-5318\">Inhaltsverzeichnis<\/p><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">01<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#implementierung-von-transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-mit-der-mailgun-api\">Implementierung von Transaktions-E-Mail-Workflows f\u00fcr Versandbenachrichtigungen mit der Mailgun-API<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">02<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#mailgun-konto-einrichten\">Mailgun-Konto einrichten<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">03<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#startvorlage-einrichten\">Startvorlage einrichten<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">04<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#installieren-sie-alle-abhaengigkeiten-mit-dem-folgenden-befehl\">Installieren Sie alle Abh\u00e4ngigkeiten mit dem folgenden Befehl:<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">05<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#e-mail-vorlagen-erstellen\">E-Mail-Vorlagen erstellen<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">06<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#implementierung-der-e-mail-versandfunktion\">Implementierung der E-Mail-Versandfunktion<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">07<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#integration-mit-anwendungs-events\">Integration mit Anwendungs-Events<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">08<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#testen-des-workflows\">Testen des Workflows<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">09<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#ueberwachung-und-verwaltung-von-e-mails\">\u00dcberwachung und Verwaltung von E-Mails<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">10<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#zusammenfassung\">Zusammenfassung<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Implementierung von Transaktions-E-Mail-Workflows f\u00fcr Versandbenachrichtigungen mit der Mailgun-API<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um den Schritten zu folgen, ben\u00f6tigen Sie diese Tools und Konten:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ein <a href=\"https:\/\/signup.mailgun.com\/new\/signup\" target=\"_tabs\" rel=\"noopener noreferrer\">Mailgun-Konto<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/nodejs.org\/en\/download\" target=\"_tabs\" rel=\"noopener noreferrer\">Node.js<\/a> und <a href=\"https:\/\/docs.docker.com\/engine\/install\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Docker<\/a> , das auf Ihrem lokalen Rechner installiert ist<\/li>\n\n\n\n<li>Einen Code-Editor (dieses Tutorial verwendet  <a href=\"https:\/\/code.visualstudio.com\/\" target=\"_tabs\" rel=\"noopener noreferrer\">VS Code<\/a>) und einen Webbrowser<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Bevor wir in die Implementierung eintauchen, werfen wir einen Blick auf den Workflow:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3943\" width=\"2252\" height=\"1078\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/1__3_.png\" alt=\"transactional email workflows diagram\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/1__3_.png 2252w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/1__3_-300x144.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/1__3_-768x368.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/1__3_-1024x490.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/1__3_-1536x735.png 1536w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/1__3_-2048x980.png 2048w\" sizes=\"(max-width: 2252px) 100vw, 2252px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">So funktioniert der Prozess:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Das Versandteam (oder die Person, die f\u00fcr Versand-Updates zust\u00e4ndig ist) sendet eine HTTP-Anfrage, um den Bestellstatus zu aktualisieren<\/li>\n\n\n\n<li>Der Express-Server aktualisiert den Bestellstatus in der SQLite-Datenbank und stellt einen Job in BullMQ in die Warteschlange<\/li>\n\n\n\n<li>Ein BullMQ-Worker verarbeitet Jobs aus der Warteschlange und interagiert mit der Mailgun-API, um eine E-Mail an den Kunden zu senden<\/li>\n\n\n\n<li>Der Worker wiederholt fehlgeschlagene Jobs automatisch<\/li>\n\n\n\n<li>Mailgun stellt die E-Mail an den Kunden zu<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Mailgun-Konto einrichten<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um die Mailgun-API zu nutzen, ben\u00f6tigen Sie eine Mailgun-Domain und einen API-Schl\u00fcssel zur Authentifizierung. Mailgun bietet zwei Arten von Domains: <a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/user-manual\/domains\/#sandbox-domain\" target=\"_tabs\" rel=\"noopener noreferrer\">Sandbox-Domains<\/a>  f\u00fcr Testzwecke und  <a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/user-manual\/domains\/#custom-domains\" target=\"_tabs\" rel=\"noopener noreferrer\">benutzerdefinierte Domains<\/a>  f\u00fcr den Einsatz in Produktionsumgebungen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In diesem Leitfaden verwenden Sie eine Sandbox-Domain. Jedes Mailgun-Konto wird automatisch mit einer solchen Domain bereitgestellt, sodass Sie sie nicht manuell erstellen m\u00fcssen. Um Ihre Sandbox-Domain zu erhalten, loggen Sie sich in Ihr Mailgun-Konto ein und navigieren Sie in der Seitenleiste zu <b>Send &gt; Sending &gt; Domains<\/b>. Kopieren Sie Ihre Domain:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3944\" width=\"2010\" height=\"1018\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/2__3_.png\" alt=\"Send &gt; Sending &gt; Domains Screen Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/2__3_.png 2010w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/2__3_-300x152.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/2__3_-768x389.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/2__3_-1024x519.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/2__3_-1536x778.png 1536w\" sizes=\"(max-width: 2010px) 100vw, 2010px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Standardm\u00e4\u00dfig kann eine Sandbox-Domain E-Mails nur an  <a href=\"https:\/\/help.mailgun.com\/hc\/en-us\/articles\/217531258-Authorized-Recipients\" target=\"_tabs\" rel=\"noopener noreferrer\">zugelassene Empf\u00e4nger<\/a>. Um eine E-Mail-Adresse f\u00fcr den Empfang zu autorisieren, klicken Sie auf der Seite <b>Domains<\/b> auf Ihren Domainnamen, um die Einstellungen anzuzeigen. F\u00fcgen Sie auf der Registerkarte <b>Setup<\/b> unter <b>Add authorized recipients<\/b> die E-Mail-Adresse hinzu, an die Sie E-Mails senden m\u00f6chten. Befolgen Sie unbedingt die Anweisungen, die an die von Ihnen angegebene E-Mail-Adresse gesendet wurden, um sie f\u00fcr den Empfang zu autorisieren:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3947\" width=\"2006\" height=\"1012\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/3__3_.png\" alt=\"Add authorized recipients Screen Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/3__3_.png 2006w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/3__3_-300x151.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/3__3_-768x387.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/3__3_-1024x517.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/3__3_-1536x775.png 1536w\" sizes=\"(max-width: 2006px) 100vw, 2006px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Um Ihren API-Schl\u00fcssel zu erhalten, navigieren Sie zur  <a href=\"https:\/\/app.mailgun.com\/settings\/api_security\" target=\"_tabs\" rel=\"noopener noreferrer\">Seite <b>API Keys<\/b><\/a>  und klicken Sie auf <b>Add new key<\/b>, um einen neuen API-Schl\u00fcssel zu erstellen. Geben Sie einen Namen f\u00fcr den Schl\u00fcssel ein und klicken Sie auf <b>Create Key<\/b>. Stellen Sie anschlie\u00dfend sicher, dass Sie den Wert Ihres Schl\u00fcssels kopieren, da dieser nur einmal angezeigt wird:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3948\" width=\"2012\" height=\"1022\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/4__4_.png\" alt=\"API Keys page Screen Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/4__4_.png 2012w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/4__4_-300x152.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/4__4_-768x390.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/4__4_-1024x520.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/4__4_-1536x780.png 1536w\" sizes=\"(max-width: 2012px) 100vw, 2012px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Startvorlage einrichten<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Damit sich dieses Tutorial auf die Erstellung von Transaktions-E-Mail-Workflows konzentrieren kann, haben wir eine Startvorlage f\u00fcr Sie vorbereitet, auf der Sie aufbauen k\u00f6nnen. Klonen Sie die Vorlage auf Ihren lokalen Rechner, indem Sie den folgenden Befehl in Ihrem Terminal ausf\u00fchren:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>git clone --single-branch -b starter-template https:\/\/github.com\/kimanikevin254\/mailgun-transactional-email-workflows.git<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier sind die wichtigsten Dateien im Projekt:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>src\/controllers\/order.controller.ts enth\u00e4lt<\/code> zwei Methoden:\n<ul class=\"wp-block-list\">\n<li><code>index<\/code> rendert die Admin-Benutzeroberfl\u00e4che, die in <code>src\/views\/admin.ejs<\/code> definiert ist<\/li>\n\n\n\n<li><code>updateOrderStatus<\/code> aktualisiert den Bestellstatus in der Datenbank <\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><code>src\/database\/entity\/order.entity.ts<\/code> definiert die Bestell-Entit\u00e4t<\/li>\n\n\n\n<li><code>src\/database\/entity\/user.entity.ts<\/code> definiert die Nutzer-Entit\u00e4t<\/li>\n\n\n\n<li><code>src\/database\/seed.ts<\/code> bef\u00fcllt die Datenbank mit einem Beispielnutzer und einer Beispielbestellung<\/li>\n\n\n\n<li><code>docker-compose.yml f\u00fchrt <\/code> <a href=\"https:\/\/redis.io\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Redis<\/a>  in Docker aus, was von BullMQ ben\u00f6tigt wird<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Installieren Sie alle Abh\u00e4ngigkeiten mit dem folgenden Befehl:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>npm install<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Benennen Sie als N\u00e4chstes die <code>Datei<\/code> <code>.env.example<\/code> in <code>.env <\/code>um und ersetzen Sie die Platzhalterwerte f\u00fcr <code>MAILGUN_DOMAIN <\/code>und <code>MAILGUN_API_KEY<\/code> durch die Anmeldedaten, die Sie \u00fcber das Mailgun-Dashboard erhalten haben. Geben Sie f\u00fcr die Variable MAIL_FROM Ihre E-Mail-Adresse als Wert ein.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6ffnen Sie als N\u00e4chstes die <code>Datei<\/code> <code>src\/database\/seed.ts<\/code> und ersetzen Sie die Platzhalterdetails in der <code>userInfo-Konstante<\/code> durch Ihre Angaben. Stellen Sie bei der E-Mail-Adresse sicher, dass Sie eine angeben, die Sie f\u00fcr den Empfang autorisiert haben.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bef\u00fcllen Sie schlie\u00dflich die Datenbank, indem Sie den Befehl <code>npm run db:seed<\/code> in Ihrem Terminal ausf\u00fchren. Sie k\u00f6nnen das Projekt nun mit dem Befehl <code>npm run dev<\/code> ausf\u00fchren und zu  <a href=\"http:\/\/localhost:3000\/\" target=\"_tabs\" rel=\"noopener noreferrer\">http:\/\/localhost:3000<\/a>  in Ihrem Browser navigieren, um den Bestellstatus anzuzeigen und zu aktualisieren:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3953\" width=\"2028\" height=\"536\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/5__4_.png\" alt=\"order status management screen image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/5__4_.png 2028w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/5__4_-300x79.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/5__4_-768x203.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/5__4_-1024x271.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/5__4_-1536x406.png 1536w\" sizes=\"(max-width: 2028px) 100vw, 2028px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Im n\u00e4chsten Abschnitt implementieren Sie einen Workflow, der automatisch eine E-Mail an den Nutzer sendet, sobald der Bestellstatus aktualisiert wird.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">E-Mail-Vorlagen erstellen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Gut gestaltete E-Mail-Vorlagen verbessern die Lesbarkeit, steigern das Nutzererlebnis und stellen sicher, dass Ihre E-Mails auf verschiedenen Ger\u00e4ten professionell aussehen. In diesem Abschnitt erstellen Sie Vorlagen, die Ihre Transaktions-E-Mails klar, ansprechend und effektiv machen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eine Bestellung durchl\u00e4uft drei Status (versandt, in Zustellung und zugestellt), wie im <code>OrderStatus type<\/code> in <code>src\/types\/index.ts.<\/code> definiert. Sie erstellen f\u00fcr jeden Status eine entsprechende E-Mail-Vorlage, um Ihre Kunden bei jedem Schritt auf dem Laufenden zu halten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Erstellen Sie dazu eine Datei unter <code>src\/email-templates\/html\/shipped.html<\/code> und f\u00fcgen Sie den folgenden Code hinzu:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                HTML                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-markup\">\r\n                                <code id=\"code_0_content\" class=\"language-markup\">\r\n\r\n                                    &lt;!DOCTYPE html&gt;rn&lt;html&gt;rn&lt;head&gt;rn    &lt;meta charset=&quot;UTF-8&quot; \/&gt;rn    &lt;title&gt;Order Shipped&lt;\/title&gt;rn&lt;\/head&gt;rn&lt;body style=&quot;font-family: Arial, sans-serif; background-color: #f4f4f4; padding: 20px; text-align: center;&quot;&gt;rnrn    &lt;div style=&quot;background: #ffffff; padding: 20px; border-radius: 8px; max-width: 600px; margin: auto; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);&quot;&gt;rnrn        &lt;div style=&quot;background-color: #007bff; color: white; padding: 15px; font-size: 22px; font-weight: bold; border-top-left-radius: 8px; border-top-right-radius: 8px;&quot;&gt;rn            Your Order Has Been Shipped! \u2708\ufe0frn        &lt;\/div&gt;rnrn        &lt;div style=&quot;padding: 20px; font-size: 16px; color: #333; text-align: left;&quot;&gt;rn            &lt;p style=&quot;margin: 0 0 10px;&quot;&gt;Hello, &lt;%= name %&gt;&lt;\/p&gt;rn            &lt;p style=&quot;margin: 0 0 10px;&quot;&gt;Your order has been shipped and is on its way to you. \ud83d\udce6&lt;\/p&gt;rn            &lt;p style=&quot;margin: 0 0 10px;&quot;&gt;&lt;strong&gt;Tracking Number:&lt;\/strong&gt; &lt;%= trackingNumber %&gt;&lt;\/p&gt;rn            &lt;p style=&quot;margin: 0 0 10px;&quot;&gt;You can track your package below. We hope you enjoy your purchase!&lt;\/p&gt;rnrn            &lt;a href=&quot;https:\/\/yourwebsite.com\/track?trackingNumber=&lt;%= trackingNumber %&gt;&quot;rn               style=&quot;background-color: #007bff; color: white; text-decoration: none; padding: 12px 18px; border-radius: 5px; display: inline-block; margin-top: 15px; font-weight: bold;&quot;&gt;rn                Track Your Shipmentrn            &lt;\/a&gt;rn        &lt;\/div&gt;rnrn        &lt;div style=&quot;background-color: #f4f4f4; padding: 10px; font-size: 14px; color: #555; border-bottom-left-radius: 8px; border-bottom-right-radius: 8px;&quot;&gt;rn            Thank you for shopping with us! \ud83d\uded2rn        &lt;\/div&gt;rn    &lt;\/div&gt;rn&lt;\/body&gt;rn&lt;\/html&gt;rn\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Diese E-Mail-Vorlage dient dazu, Kunden dar\u00fcber zu benachrichtigen, dass ihre Bestellung versandt wurde. Sie enth\u00e4lt Platzhalter f\u00fcr den Kundennamen und die Tracking-Nummer, die dynamisch ausgef\u00fcllt werden von <a href=\"https:\/\/ejs.co\/\" target=\"_tabs\" rel=\"noopener noreferrer\">EJS<\/a> beim Rendern der Vorlage. Die Vorlagen f\u00fcr die anderen beiden Bestellstatus folgen demselben Format.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Erstellen Sie eine Vorlage, um Nutzer dar\u00fcber zu benachrichtigen, dass sich ihre Bestellung in Zustellung befindet, indem Sie eine Datei namens <code>out_for_delivery.html<\/code> im Ordner <code>src\/email-templates\/html<\/code> erstellen und den folgenden Code hinzuf\u00fcgen:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                HTML                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-markup\">\r\n                                <code id=\"code_0_content\" class=\"language-markup\">\r\n\r\n                                    &lt;!DOCTYPE html&gt;rn&lt;html&gt;rn&lt;head&gt;rn    &lt;meta charset=&quot;UTF-8&quot; \/&gt;rn    &lt;title&gt;Out for Delivery&lt;\/title&gt;rn&lt;\/head&gt;rn&lt;body style=&quot;font-family: Arial, sans-serif; background-color: #f4f4f4; padding: 20px; text-align: center;&quot;&gt;rnrn    &lt;div style=&quot;background: #ffffff; padding: 20px; border-radius: 8px; max-width: 600px; margin: auto; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);&quot;&gt;rnrn        &lt;div style=&quot;background-color: #28a745; color: white; padding: 15px; font-size: 22px; font-weight: bold; border-top-left-radius: 8px; border-top-right-radius: 8px;&quot;&gt;rn            Your Order Is Out for Delivery! \ud83d\ude9arn        &lt;\/div&gt;rnrn        &lt;div style=&quot;padding: 20px; font-size: 16px; color: #333; text-align: left;&quot;&gt;rn            &lt;p style=&quot;margin: 0 0 10px;&quot;&gt;Hello, &lt;%= name %&gt;&lt;\/p&gt;rn            &lt;p style=&quot;margin: 0 0 10px;&quot;&gt;Good news! Your package is out for delivery and will arrive soon. \ud83d\udce6&lt;\/p&gt;rn            &lt;p style=&quot;margin: 0 0 10px;&quot;&gt;&lt;strong&gt;Tracking Number:&lt;\/strong&gt; &lt;%= trackingNumber %&gt;&lt;\/p&gt;rn            &lt;p style=&quot;margin: 0 0 10px;&quot;&gt;We appreciate your business and can&#039;t wait for you to receive your order!&lt;\/p&gt;rnrn            &lt;a href=&quot;https:\/\/yourwebsite.com\/track?trackingNumber=&lt;%= trackingNumber %&gt;&quot;rn               style=&quot;background-color: #28a745; color: white; text-decoration: none; padding: 12px 18px; border-radius: 5px; display: inline-block; margin-top: 15px; font-weight: bold;&quot;&gt;rn                Track Your Packagern            &lt;\/a&gt;rn        &lt;\/div&gt;rnrn        &lt;div style=&quot;background-color: #f4f4f4; padding: 10px; font-size: 14px; color: #555; border-bottom-left-radius: 8px; border-bottom-right-radius: 8px;&quot;&gt;rn            Thank you for choosing us! \ud83d\udecd\ufe0frn        &lt;\/div&gt;rn    &lt;\/div&gt;rn&lt;\/body&gt;rn&lt;\/html&gt;\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Erstellen Sie abschlie\u00dfend eine Vorlage, um Nutzer dar\u00fcber zu benachrichtigen, dass ihre Bestellung zugestellt wurde, indem Sie eine Datei namens <code>delivered.html<\/code> im <code>folder<\/code> <code>src\/email-templates\/html<\/code> erstellen und den folgenden Code hinzuf\u00fcgen:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                HTML                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-markup\">\r\n                                <code id=\"code_0_content\" class=\"language-markup\">\r\n\r\n                                    &lt;!DOCTYPE html&gt;rn&lt;html&gt;rn&lt;head&gt;rn    &lt;meta charset=&quot;UTF-8&quot; \/&gt;rn    &lt;title&gt;Order Delivered&lt;\/title&gt;rn&lt;\/head&gt;rn&lt;body style=&quot;font-family: Arial, sans-serif; background-color: #f4f4f4; padding: 20px; text-align: center;&quot;&gt;rnrn    &lt;div style=&quot;background: #ffffff; padding: 20px; border-radius: 8px; max-width: 600px; margin: auto; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);&quot;&gt;rnrn        &lt;div style=&quot;background-color: #ffc107; color: white; padding: 15px; font-size: 22px; font-weight: bold; border-top-left-radius: 8px; border-top-right-radius: 8px;&quot;&gt;rn            Your Order Has Been Delivered! \ud83c\udf89rn        &lt;\/div&gt;rnrn        &lt;div style=&quot;padding: 20px; font-size: 16px; color: #333; text-align: left;&quot;&gt;rn            &lt;p style=&quot;margin: 0 0 10px;&quot;&gt;Hello, &lt;%= name %&gt;&lt;\/p&gt;rn            &lt;p style=&quot;margin: 0 0 10px;&quot;&gt;We&#039;re happy to inform you that your package has been successfully delivered. \ud83c\udf81&lt;\/p&gt;rn            &lt;p style=&quot;margin: 0 0 10px;&quot;&gt;&lt;strong&gt;Tracking Number:&lt;\/strong&gt; &lt;%= trackingNumber %&gt;&lt;\/p&gt;rn            &lt;p style=&quot;margin: 0 0 10px;&quot;&gt;We hope you enjoy your purchase! If you have any questions, feel free to contact us.&lt;\/p&gt;rnrn            &lt;a href=&quot;https:\/\/yourwebsite.com\/track?trackingNumber=&lt;%= trackingNumber %&gt;&quot;rn               style=&quot;background-color: #ffc107; color: white; text-decoration: none; padding: 12px 18px; border-radius: 5px; display: inline-block; margin-top: 15px; font-weight: bold;&quot;&gt;rn                Track Your Orderrn            &lt;\/a&gt;rn        &lt;\/div&gt;rnrn        &lt;div style=&quot;background-color: #f4f4f4; padding: 10px; font-size: 14px; color: #555; border-bottom-left-radius: 8px; border-bottom-right-radius: 8px;&quot;&gt;rn            Thank you for shopping with us! \ud83d\udecd\ufe0frn        &lt;\/div&gt;rn    &lt;\/div&gt;rn&lt;\/body&gt;rn&lt;\/html&gt;\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Um E-Mail-Vorlagen dynamisch zu verwalten und zu rendern, m\u00fcssen Sie eine Klasse erstellen, die Vorlagen f\u00fcr verschiedene Bestellstatus l\u00e4dt und organisiert. Diese Klasse ruft die richtige Vorlage ab und rendert sie mit kundenspezifischen Daten. Erstellen Sie dazu eine neue Datei namens <code>index.ts<\/code> im <code>src\/email-templates folder <\/code> und f\u00fcgen Sie den folgenden Code hinzu:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    import { readFileSync } from &quot;fs&quot;;rnimport { EmailTemplate, OrderStatus } from &quot;..\/types&quot;;rnimport ejs from &quot;ejs&quot;;rnrnexport class EmailTemplateManager {rn    private templates: Map&lt;OrderStatus, EmailTemplate&gt;;rnrn    constructor() {rn        this.templates = new Map();rn        this.loadTemplates();rn    }rnrn    private loadTemplates() {rn        \/\/ Load each template for different statusesrn        const statuses: OrderStatus[] = [rn            &quot;shipped&quot;,rn            &quot;out_for_delivery&quot;,rn            &quot;delivered&quot;,rn        ];rn        const subjects: Record&lt;OrderStatus, string&gt; = {rn            shipped: &quot;Your Order Has Been Shipped! \u2708\ufe0f&quot;,rn            out_for_delivery: &quot;Your Order is Out for Delivery! \ud83d\ude9a&quot;,rn            delivered: &quot;Your Order Has Been Delivered! \ud83c\udf89&quot;,rn        };rnrn        statuses.forEach((status) =&gt; {rn            const htmlTemplate = readFileSync(rn                `src\/email-templates\/html\/${status}.html`,rn                &quot;utf-8&quot;rn            );rnrn            this.templates.set(status, {rn                subject: subjects[status],rn                html: htmlTemplate,rn            });rn        });rn    }rnrn    getTemplate(status: OrderStatus): EmailTemplate {rn        const template = this.templates.get(status);rn        if (!template) {rn            throw new Error(`No template found for status: ${status}`);rn        }rn        return template;rn    }rnrn    renderTemplate(templateString: string, data: Record&lt;string, any&gt;): string {rn        return ejs.render(templateString, data); \/\/ Render the template with the provided datarn    }rn}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Diese Klasse initialisiert eine private Variable namens templates, die E-Mail-Vorlagen zur schnellen Suche basierend auf dem Bestellstatus in einer Map speichert. Die Verwendung einer Map stellt einen effizienten Abruf sicher und vermeidet das wiederholte Lesen von Dateien von der Festplatte. Die Klasse definiert au\u00dferdem die folgenden Methoden:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>loadTemplates<\/code> (privat) liest HTML-Vorlagen aus Dateien und speichert sie zusammen mit ihren entsprechenden Betreffzeilen in der templates-Map.<\/li>\n\n\n\n<li><code>getTemplate<\/code> ruft die E-Mail-Vorlage f\u00fcr einen bestimmten Bestellstatus ab und gibt einen Fehler aus, wenn keine Vorlage gefunden wird.<\/li>\n\n\n\n<li><code>renderTemplate<\/code> verwendet EJS, um eine Vorlage mit bereitgestellten Daten dynamisch zu rendern.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Implementierung der E-Mail-Versandfunktion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nachdem die E-Mail-Vorlagen eingerichtet sind, ist der n\u00e4chste Schritt die Implementierung der Funktion f\u00fcr den Versand von Benachrichtigungen. Dies beinhaltet das Einreihen von E-Mail-Jobs in die Warteschlange und deren asynchrone Verarbeitung.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bevor Sie dies tun k\u00f6nnen, m\u00fcssen Sie jedoch einige Abh\u00e4ngigkeiten installieren, indem Sie den folgenden Befehl ausf\u00fchren:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>npm i mailgun.js@11.1.0 form-data@4.0.2 bullmq@5.41.2 ioredis@5.5.0<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier ist ein \u00dcberblick \u00fcber jede dieser Abh\u00e4ngigkeiten:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>mailgun.js<\/code> ist ein Node.js-Client f\u00fcr die Interaktion mit der Mailgun-API. Sie verwenden dies, um Transaktions-E-Mails zu versenden.<\/li>\n\n\n\n<li><code>form-data<\/code> ist ein Paket, das von <code>mailgun.js<\/code> ben\u00f6tigt wird, um Formular\u00fcbermittlungen beim Versand von E-Mails zu verarbeiten.<\/li>\n\n\n\n<li><code>bullmq<\/code> ist eine Job-Warteschlangen-Bibliothek zur Verarbeitung asynchroner Aufgaben. Dadurch k\u00f6nnen Sie E-Mail-Benachrichtigungen in die Warteschlange einreihen und im Hintergrund verarbeiten.<\/li>\n\n\n\n<li><code>ioredis<\/code> ist ein Redis-Client f\u00fcr Node.js, der von BullMQ verwendet wird, um Jobs in der Warteschlange zu speichern und zu verwalten.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Als N\u00e4chstes m\u00fcssen Sie einen Mailgun-API-Client definieren, den Sie zum Versenden von E-Mails verwenden. Erstellen Sie dazu eine neue Datei unter <code>src\/config\/mailgun.config.ts<\/code> und f\u00fcgen Sie den folgenden Code hinzu:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    import FormData from &quot;form-data&quot;;rnimport Mailgun from &quot;mailgun.js&quot;;rnrnconst mailgun = new Mailgun(FormData);rnexport const mgClient = mailgun.client({rn    username: &quot;api&quot;,rn    key: process.env.MAILGUN_API_KEY,rn});\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Dieser Code richtet einen Mailgun-Client mit der Bibliothek <code>mailgun.js<\/code> und <code>form-data<\/code> ein und exportiert ihn, sodass Ihre Anwendung E-Mails \u00fcber die Mailgun-API mit dem in Umgebungsvariablen gespeicherten API-Schl\u00fcssel versenden kann.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nun m\u00fcssen Sie eine Redis-Verbindung definieren, die von BullMQ zum Speichern und Verwalten von Hintergrundjobs verwendet wird. Erstellen Sie dazu eine neue Datei namens <code>redis.config.ts<\/code> im Ordner <code>src\/config<\/code> und f\u00fcgen Sie den unten stehenden Code hinzu:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    import IORedis from &quot;ioredis&quot;;rnrnexport const redisConfig = new IORedis({rn    host: process.env.REDIS_HOST,rn    port: parseInt(process.env.REDIS_PORT),rn    maxRetriesPerRequest: null,rn});\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Sie m\u00fcssen eine BullMQ-Warteschlange f\u00fcr die Versandbenachrichtigungen einrichten, die Hintergrundjobs f\u00fcr E-Mail-Benachrichtigungen unter Verwendung der im vorherigen Schritt definierten Redis-Verbindung verarbeitet. Erstellen Sie dazu eine neue Datei namens <code>queues.config.ts<\/code> im Ordner <code>src\/config<\/code> und f\u00fcgen Sie den folgenden Code hinzu:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    import { Queue } from &quot;bullmq&quot;;rnimport { redisConfig } from &quot;.\/redis.config&quot;;rnrnexport const QUEUE_NAMES = {rn    SHIPPING_NOTICATIONS: &quot;shipping-notifications&quot;,rn};rnrnexport const JOB_NAMES = {rn    SEND_NOTIFICATION: &quot;send-notification&quot;,rn};rnrnexport const SHIPPING_NOTICATIONS_QUEUE = new Queue(rn    QUEUE_NAMES.SHIPPING_NOTICATIONS,rn    {rn        connection: redisConfig,rn    }rn);\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Dieser Code definiert au\u00dferdem Namen f\u00fcr die Warteschlange und den Jobtyp, die in anderen Teilen der Anwendung verwendet werden k\u00f6nnen, um fest codierte Strings zu vermeiden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Erstellen Sie abschlie\u00dfend eine neue Datei unter <code>src\/services\/notifications.service.ts<\/code> und f\u00fcgen Sie den folgenden Code hinzu:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    import { Job, Queue, Worker } from &quot;bullmq&quot;;rnimport {rn    QUEUE_NAMES,rn    SHIPPING_NOTICATIONS_QUEUE,rn    JOB_NAMES,rn} from &quot;..\/config\/queues.config&quot;;rnimport { redisConfig } from &quot;..\/config\/redis.config&quot;;rnimport { mgClient } from &quot;..\/config\/mailgun.config&quot;;rnimport { IMailgunClient } from &quot;mailgun.js\/Interfaces&quot;;rnimport { EmailTemplateManager } from &quot;..\/email-templates&quot;;rnimport { MailgunMessageData } from &quot;mailgun.js&quot;;rnimport { NotificationJob } from &quot;..\/types&quot;;rnrnexport class NotificationService {rn    private queue: Queue;rn    private mailgunClient: IMailgunClient;rn    private templateManager: EmailTemplateManager;rnrn    constructor() {rn        this.queue = SHIPPING_NOTICATIONS_QUEUE;rn        this.mailgunClient = mgClient;rn        this.templateManager = new EmailTemplateManager();rn        this.setupWorker();rn    }rnrn    private setupWorker() {rn        const worker = new Worker(rn            QUEUE_NAMES.SHIPPING_NOTICATIONS,rn            async (job) =&gt; {rn                console.log(`Processing job: ${job.id}`);rn                await this.processNotification(job);rn            },rn            {rn                connection: redisConfig,rn            }rn        );rnrn        worker.on(&quot;completed&quot;, (job) =&gt; {rn            console.log(`Job ${job.id} completed successfully`);rn        });rnrn        worker.on(&quot;failed&quot;, (job, error) =&gt; {rn            console.log(`Job ${job?.id} failed`, error);rn        });rn    }rnrn    private async processNotification(job: Job&lt;NotificationJob&gt;) {rn        const { email, trackingNumber, status, metadata } = job.data;rnrn        try {rn            const template = this.templateManager.getTemplate(status);rn            const emailData: MailgunMessageData = {rn                from: process.env.MAIL_FROM,rn                to: email,rn                subject: template.subject,rn                html: this.templateManager.renderTemplate(template.html, {rn                    trackingNumber,rn                    ...metadata,rn                }),rn            };rnrn            await this.mailgunClient.messages.create(rn                process.env.MAILGUN_DOMAIN,rn                emailDatarn            );rn        } catch (error) {rn            console.log(error);rn            throw error;rn        }rn    }rnrn    async queueNotification(data: NotificationJob) {rn        await this.queue.add(JOB_NAMES.SEND_NOTIFICATION, data, {rn            attempts: 5, \/\/ number of retry attempts before failing permanentlyrn            backoff: {rn                type: &quot;exponential&quot;, \/\/ Retry using exponential backoffrn                delay: 5000, \/\/ Delay in ms before retryingrn            },rn        });rn        console.log(&quot;Job queued successfully&quot;);rn    }rn}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Dieser Code definiert eine <code>NotificationService<\/code>-Klasse, die E-Mail-Benachrichtigungen mithilfe eines Job-Warteschlangensystems mit BullMQ und Mailgun verarbeitet. Diese Klasse initialisiert drei private Eigenschaften: queue, die Warteschlange, in die E-Mail-Jobs eingereiht werden; <code>mailgunClient<\/code>, den Mailgun-Client zum Versenden von E-Mails; und <code>templateManager<\/code>, eine Instanz der zuvor erstellten TemplateManager-Klasse zur Verwaltung und zum Abruf von E-Mail-Vorlagen. Diese Klasse definiert au\u00dferdem die folgenden Methoden:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>setupWorker<\/code> erstellt einen Worker, der auf neue E-Mail-Jobs wartet und diese verarbeitet. Er protokolliert den Abschluss oder das Fehlschlagen von Jobs.<\/li>\n\n\n\n<li><code>processNotification<\/code> ruft die richtige E-Mail-Vorlage ab, f\u00fcllt sie mit dynamischen Daten und versendet die E-Mail \u00fcber Mailgun.<\/li>\n\n\n\n<li><code>queueNotification<\/code> f\u00fcgt der Warteschlange einen neuen E-Mail-Job hinzu, mit <a href=\"https:\/\/docs.bullmq.io\/guide\/retrying-failing-jobs\" target=\"_tabs\" rel=\"noopener noreferrer\">Wiederholungsversuchen<\/a> und <a href=\"https:\/\/docs.bullmq.io\/guide\/retrying-failing-jobs#built-in-backoff-strategies\" target=\"_tabs\" rel=\"noopener noreferrer\">exponentiellem Backoff<\/a> f\u00fcr fehlgeschlagene Versuche. Diese Methode kann aus anderen Teilen der Anwendung aufgerufen werden, um Jobs zur Warteschlange hinzuzuf\u00fcgen.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Integration mit Anwendungs-Events<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um E-Mail-Benachrichtigungen zu versenden, wenn ein Bestellstatus aktualisiert wird, m\u00fcssen Sie einen Job in das Benachrichtigungssystem einreihen. \u00d6ffnen Sie dazu die Datei <code>src\/controllers\/order.controller.ts<\/code> und f\u00fcgen Sie die folgende Importanweisung hinzu, um die <code>NotificationService<\/code>-Klasse zu importieren:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>import { NotificationService } from \"..\/services\/notifications.service\";<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Definieren Sie als N\u00e4chstes eine private Eigenschaft innerhalb der <code>OrderController<\/code>-Klasse, um eine Instanz der <code>NotificationService<\/code>-Klasse zu speichern:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>private notificationService: NotificationService;<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Initialisieren Sie diese Eigenschaft, indem Sie den folgenden Code in die <code>constructor<\/code>-Methode einf\u00fcgen:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>this.notificationService = new NotificationService();<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcgen Sie abschlie\u00dfend den folgenden Code innerhalb der <code>updateOrderStatus<\/code>-Methode nach <code>await this.orderRepository.save(order);<\/code> hinzu, um einen Job in die Warteschlange einzureihen, sobald der Bestellstatus erfolgreich aktualisiert wurde:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    \/\/ Send notificationrnthis.notificationService.queueNotification({rn    email: order.user.email,rn    trackingNumber: order.trackingNumber,rn    status,rn    metadata: {rn        name: order.user.name.split(&quot; &quot;)[0],rn    },rn});\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Der Transaktions-E-Mail-Workflow ist nun abgeschlossen. Fahren Sie nun fort und testen Sie, ob alles wie erwartet funktioniert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Testen des Workflows<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um sicherzustellen, dass alles korrekt funktioniert, starten Sie Redis, indem Sie den folgenden Befehl in Ihrem Terminal ausf\u00fchren:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>docker compose up -d<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nach dem Ausf\u00fchren dieses Befehls \u00fcberpr\u00fcfen Sie, ob Redis aktiv ist, indem Sie die Container auflisten:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>docker ps<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dieser Befehl zeigt eine Liste der aktiven Container an, und Sie sollten den ausgef\u00fchrten <code>redis<\/code>-Container sehen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Starten Sie als N\u00e4chstes den Express-Server mit dem Befehl <code>npm run dev<\/code> und navigieren Sie zu <a href=\"http:\/\/localhost:3000\/\" target=\"_tabs\" rel=\"noopener noreferrer\">http:\/\/localhost:3000<\/a> in Ihrem Browser. Aktualisieren Sie im Dashboard der Anwendung den Bestellstatus auf eine der verf\u00fcgbaren Optionen. Sobald dieser aktualisiert ist, erhalten Sie eine sofortige Antwort:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3955\" width=\"2012\" height=\"550\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/6__4_.png\" alt=\"Shipped Order Status Screen Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/6__4_.png 2012w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/6__4_-300x82.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/6__4_-768x210.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/6__4_-1024x280.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/6__4_-1536x420.png 1536w\" sizes=\"(max-width: 2012px) 100vw, 2012px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In Ihrem Terminal erhalten Sie ein Protokoll, das Sie dar\u00fcber benachrichtigt, dass der E-Mail-Versandjob erfolgreich in die Warteschlange eingereiht wurde und verarbeitet wird:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Job queued successfully<br>\nProcessing job: 1<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Und wenn er abgeschlossen ist:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Job 1 completed successfully<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sie erhalten dann eine E-Mail mit dem aktualisierten Bestellstatus:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3958\" width=\"2028\" height=\"1024\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/7__3_.png\" alt=\"Your order has shipped screen image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/7__3_.png 2028w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/7__3_-300x151.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/7__3_-768x388.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/7__3_-1024x517.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/7__3_-1536x776.png 1536w\" sizes=\"(max-width: 2028px) 100vw, 2028px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Jedes Mal, wenn Sie den Status einer Bestellung aktualisieren, sendet das System automatisch eine entsprechende E-Mail an den Nutzer, um diesen auf dem Laufenden zu halten:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3962\" width=\"2014\" height=\"986\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/8__3_.png\" alt=\"Your Order has been delivered screen image 8\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/8__3_.png 2014w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/8__3_-300x147.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/8__3_-768x376.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/8__3_-1024x501.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/8__3_-1536x752.png 1536w\" sizes=\"(max-width: 2014px) 100vw, 2014px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Der vollst\u00e4ndige Code der Anwendung ist verf\u00fcgbar auf <a href=\"https:\/\/github.com\/kimanikevin254\/mailgun-transactional-email-workflows\" target=\"_tabs\" rel=\"noopener noreferrer\">GitHub<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00dcberwachung und Verwaltung von E-Mails<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um sicherzustellen, dass Ihre Transaktions-E-Mails Kunden effektiv erreichen, m\u00fcssen Sie deren Zustellstatus und \u00d6ffnungsraten \u00fcberwachen und etwaige Fehler beheben. Mailgun bietet ein Dashboard, in dem Sie gesendete E-Mails nachverfolgen, \u00fcberpr\u00fcfen, ob sie zugestellt, ge\u00f6ffnet oder angeklickt wurden, und Bounce-Berichte einsehen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Greifen Sie auf dieses Dashboard zu, indem Sie in Mailgun zu <b>Send &gt; Reporting &gt; Metrics<\/b> navigieren:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3968\" width=\"2016\" height=\"1072\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/9__3_.png\" alt=\"Send &gt; Reporting &gt; Metrics Screen Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/9__3_.png 2016w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/9__3_-300x160.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/9__3_-768x408.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/9__3_-1024x545.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/9__3_-1536x817.png 1536w\" sizes=\"(max-width: 2016px) 100vw, 2016px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6ffnungsraten werden jedoch nicht automatisch nachverfolgt, und Sie m\u00fcssen diese manuell \u00fcber den Tab <b>Settings<\/b> Ihrer Absenderdomain konfigurieren:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3975\" width=\"2040\" height=\"1064\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/10__2_.png\" alt=\"Domain Settings Screen Tab image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/10__2_.png 2040w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/10__2_-300x156.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/10__2_-768x401.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/10__2_-1024x534.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/10__2_-1536x801.png 1536w\" sizes=\"(max-width: 2040px) 100vw, 2040px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Weitere Informationen zum Nachverfolgen von \u00d6ffnungs- und Klickraten finden Sie in der <a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/user-manual\/tracking-messages\/#tracking-opens\" target=\"_tabs\" rel=\"noopener noreferrer\">offiziellen Dokumentation<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Verwenden Sie zus\u00e4tzlich <a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/user-manual\/tracking-messages\/#webhooks\" target=\"_tabs\" rel=\"noopener noreferrer\">Webhooks<\/a> , um Echtzeit-Benachrichtigungen \u00fcber fehlgeschlagene Zustellungen zu erhalten und entsprechende Ma\u00dfnahmen zu ergreifen, wie zum Beispiel den erneuten Versand der E-Mail.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Durch die aktive \u00dcberwachung Ihrer E-Mail-Performance verbessern Sie die Zustellbarkeit, reduzieren Bounces und stellen sicher, dass wichtige Benachrichtigungen Ihre Kunden erreichen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zusammenfassung<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In diesem Artikel haben Sie erfahren, wie Sie einen Transaktions-E-Mail-Workflow f\u00fcr Versandbenachrichtigungen mit Mailgun, BullMQ und Redis einrichten. Sie haben gelernt, wie Sie Mailgun f\u00fcr den E-Mail-Versand einrichten, eine Job-Warteschlange mit BullMQ konfigurieren und in ein System zur Aktualisierung von Bestellungen integrieren, um sicherzustellen, dass Kunden E-Mail-Benachrichtigungen in Echtzeit erhalten. Dieser Ansatz verbessert die Kommunikation und steigert das gesamte Kundenerlebnis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">War das hilfreich? Abonnieren Sie unseren Newsletter f\u00fcr weitere Tutorials und detaillierte Einblicke wie diesen.<\/p>\n\n\n\r\n    <aside data-content-type=\"longform\"  class=\"banner-block longform-spacings rounded-lg shadow-lg px-5 py-6 px-md-6 py-md-7 p-lg-7 bg-light\" data-theme=\"dark\" aria-labelledby=\"banner-block-block_f97776e89dae2c8ef0812f2d149c8ae0\">\r\n                    <p class=\"text-uppercase section-caption text-body-color\">\r\n                Registrieren            <\/p>\r\n                            <p class=\"h4 text-accent fw-bold\" id=\"banner-block-block_f97776e89dae2c8ef0812f2d149c8ae0\">\r\n                Loslegen ist ganz einfach. Und es ist kostenlos.            <\/p>\r\n                            <div class=\"mb-0 text-body-color\">\r\n                                    <div class=\"content-body mb-0 text-body-color\">Erfahren Sie, was Sie mit der weltbesten Plattform f\u00fcr E-Mail-Zustellung alles erreichen k\u00f6nnen.<\/div>\r\n                            <\/div>\r\n        \r\n        <div class=\"text-start mt-5\"><a href=\"https:\/\/signup.mailgun.com\/new\/signup\"  class=\"btn btn-secondary\" >Get started<\/a><\/div>\r\n    <\/aside>\r\n\r\n","protected":false},"excerpt":{"rendered":"<p>Ihre Kundschaft erwartet Echtzeit-Updates, sobald sich der Status ihrer Bestellung \u00e4ndert. Dieser Leitfaden f\u00fchrt Sie durch die Erstellung eines zuverl\u00e4ssigen Transaktions-E-Mail-Workflows f\u00fcr Versandbenachrichtigungen mithilfe der Mailgun-API und BullMQ, damit Ihre E-Mails genau dann im Posteingang landen, wenn sie sollen.<\/p>\n","protected":false},"author":5,"featured_media":3952,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[19],"class_list":["post-19771","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-dev-life"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Transaktions-E-Mail-Workflows mit der Mailgun-API erstellen - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Erfahren Sie, wie Sie mit der Mailgun-API und BullMQ skalierbare und ereignisgesteuerte E-Mails f\u00fcr Versandbenachrichtigungen erstellen, um eine bessere Performance und Zustellbarkeit zu erzielen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Transaktions-E-Mail-Workflows mit der Mailgun-API erstellen - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Erfahren Sie, wie Sie mit der Mailgun-API und BullMQ skalierbare und ereignisgesteuerte E-Mails f\u00fcr Versandbenachrichtigungen erstellen, um eine bessere Performance und Zustellbarkeit zu erzielen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-14T15:14:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png\" \/>\n\t<meta property=\"og:image:width\" content=\"720\" \/>\n\t<meta property=\"og:image:height\" content=\"448\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"11\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\\\/\",\"name\":\"Transaktions-E-Mail-Workflows mit der Mailgun-API erstellen - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"datePublished\":\"2025-06-11T00:00:00+00:00\",\"dateModified\":\"2026-09-14T15:14:12+00:00\",\"description\":\"Erfahren Sie, wie Sie mit der Mailgun-API und BullMQ skalierbare und ereignisgesteuerte E-Mails f\u00fcr Versandbenachrichtigungen erstellen, um eine bessere Performance und Zustellbarkeit zu erzielen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Erstellen von Transaktions-E-Mail-Workflows f\u00fcr Versandbenachrichtigungen mit der Mailgun-API\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Leistungsstarke Transaktions-E-Mail-APIs, mit denen Sie E-Mails senden, empfangen und nachverfolgen k\u00f6nnen, speziell f\u00fcr Entwickler konzipiert. Erfahren Sie noch heute mehr!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Transactional Email API Service For Developers | Mailgun\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Transaktions-E-Mail-Workflows mit der Mailgun-API erstellen - Transactional Email API Service For Developers | Mailgun","description":"Erfahren Sie, wie Sie mit der Mailgun-API und BullMQ skalierbare und ereignisgesteuerte E-Mails f\u00fcr Versandbenachrichtigungen erstellen, um eine bessere Performance und Zustellbarkeit zu erzielen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\/","og_locale":"de_DE","og_type":"article","og_title":"Transaktions-E-Mail-Workflows mit der Mailgun-API erstellen - Transactional Email API Service For Developers | Mailgun","og_description":"Erfahren Sie, wie Sie mit der Mailgun-API und BullMQ skalierbare und ereignisgesteuerte E-Mails f\u00fcr Versandbenachrichtigungen erstellen, um eine bessere Performance und Zustellbarkeit zu erzielen.","og_url":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","article_modified_time":"2026-09-14T15:14:12+00:00","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"11\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\/","url":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\/","name":"Transaktions-E-Mail-Workflows mit der Mailgun-API erstellen - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","datePublished":"2025-06-11T00:00:00+00:00","dateModified":"2026-09-14T15:14:12+00:00","description":"Erfahren Sie, wie Sie mit der Mailgun-API und BullMQ skalierbare und ereignisgesteuerte E-Mails f\u00fcr Versandbenachrichtigungen erstellen, um eine bessere Performance und Zustellbarkeit zu erzielen.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-e-mail-workflows-fuer-versandbenachrichtigungen-erstellen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/de\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/de\/blog\/"},{"@type":"ListItem","position":3,"name":"Erstellen von Transaktions-E-Mail-Workflows f\u00fcr Versandbenachrichtigungen mit der Mailgun-API"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/de\/#website","url":"https:\/\/www.mailgun.com\/de\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Leistungsstarke Transaktions-E-Mail-APIs, mit denen Sie E-Mails senden, empfangen und nachverfolgen k\u00f6nnen, speziell f\u00fcr Entwickler konzipiert. Erfahren Sie noch heute mehr!","publisher":{"@id":"https:\/\/www.mailgun.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/de\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.mailgun.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","width":512,"height":512,"caption":"Transactional Email API Service For Developers | Mailgun"},"image":{"@id":"https:\/\/www.mailgun.com\/de\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/19771","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/users\/5"}],"version-history":[{"count":1,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/19771\/revisions"}],"predecessor-version":[{"id":19838,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/19771\/revisions\/19838"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/media\/3952"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/media?parent=19771"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog_category?post=19771"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}