{"id":23386,"date":"2026-09-16T02:53:17","date_gmt":"2026-09-16T02:53:17","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/a-guide-to-using-mailguns-webhooks-2\/"},"modified":"2026-09-16T02:53:18","modified_gmt":"2026-09-16T02:53:18","slug":"a-guide-to-using-mailguns-webhooks","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/de\/blog\/product\/a-guide-to-using-mailguns-webhooks\/","title":{"rendered":"Ein praktischer Leitfaden zur Nutzung von Mailgun-Webhooks"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><i>Dieser Gastbeitrag stammt von\u00a0<\/i><i><b>Opeyemi Obembe<\/b><\/i><i>, einem Mailgun-Kunden aus Nigeria. Als wir das Tutorial von\u00a0Opeyemi zur Einrichtung von Webhooks sahen, wussten wir, dass wir es mit Ihnen teilen mussten. Die Methodik von Opeyemi ist nicht nur absolut verl\u00e4sslich, sondern Opeyemi ist auch genau der Typ Profi aus der Entwicklung, den wir gerne unterst\u00fctzen.<\/i><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><i>Opeyemi hat sich vor vier Jahren bei Mailgun registriert und seitdem einige wirklich herausragende Dinge entwickelt. Zuletzt hat Opeyemi\u00a0Suet entwickelt, ein Open-Source-Projekt, das detaillierte Analysen und Berichte f\u00fcr \u00fcber Mailgun versendete Transaktions-E-Mails bietet. Nutzen Sie es in Kombination mit unseren neuen Analysen-Funktionen, um zus\u00e4tzliche Einblicke in Ihr E-Mail-Engagement zu erhalten.<\/i><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Transaktions-E-Mails sind f\u00fcr die meisten Apps unerl\u00e4sslich. Wir versenden Willkommens-E-Mails, E-Mails zur Passwort-Wiederherstellung, Benachrichtigungen und mehr. Und daf\u00fcr nutzen wir Anbieter wie Mailgun. Der E-Mail-Versand ist gro\u00dfartig, aber wie sieht es mit der Zustellung und Leistung aus? Hat dieser Nutzer diese E-Mail zum Zur\u00fccksetzen des Passworts erhalten? Wurde diese Benachrichtigungs-E-Mail \u00fcber eine ablaufende Kreditkarte ge\u00f6ffnet?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Obwohl diese Daten in\u00a0<a href=\"https:\/\/app.mailgun.com\/sessions\/new\" target=\"_tabs\" rel=\"noopener noreferrer\">Ihrem Mailgun-Konto-Dashboard<\/a>\u00a0verf\u00fcgbar sind, besteht eine weitere M\u00f6glichkeit, Updates zu Ihren Transaktionsnachrichten in Mailgun zu erhalten, \u00fcber <a href=\"https:\/\/www.mailgun.com\/resources\/learn\/glossary\/webhook\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Webhooks<\/a>.\u00a0<a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/api-reference\/intro\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Es gibt auch die API<\/a>, aber im Gegensatz zur API, bei der Sie diese Updates \u201eanfragen\u201c (Poll), werden Ihnen die Updates bei Webhooks direkt gesendet (Push). Sie m\u00fcssen lediglich die URL eines Skripts angeben, das die Event-Daten \u00fcber\u00a0<code>POST<\/code> verarbeiten kann.<\/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-4007\"><p class=\"h5 m-0\" id=\"toc-title-4007\">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=\"#einrichtung-von-webhooks\">Einrichtung von Webhooks<\/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=\"#daten-verarbeiten\">Daten verarbeiten<\/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=\"#absicherung\">Absicherung<\/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=\"#skalierbarkeit\">Skalierbarkeit<\/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=\"#fazit\">Fazit<\/a><\/div><\/div><\/nav>\n\n\n<p class=\"wp-block-paragraph\"><b>Nat\u00fcrlich bietet Push einige Vorteile gegen\u00fcber Poll.<\/b><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sie m\u00fcssen keine wiederholten API-Anfragen stellen. Dadurch werden weniger Serverressourcen verbraucht.<\/li>\n\n\n\n<li>Updates erfolgen eher in Echtzeit, da sie gesendet werden, sobald sie auf dem Server verf\u00fcgbar sind.<\/li>\n<\/ul>\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_6e20e9f9a52c803560cbd9a0b964ca35\">\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_6e20e9f9a52c803560cbd9a0b964ca35\">\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\n\n\n<h2 class=\"wp-block-heading\">Einrichtung von Webhooks<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Es gibt zwei M\u00f6glichkeiten, Webhooks in Mailgun einzurichten. Dies kann entweder \u00fcber das Mailgun-Dashboard erfolgen oder\u00a0<a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/api-reference\/openapi-final\/tag\/Webhooks\/\" target=\"_tabs\" rel=\"noopener noreferrer\">API<\/a>. Der unkompliziertere Weg f\u00fchrt \u00fcber das Dashboard. Sobald Sie in Ihrem Dashboard eingeloggt sind,\u00a0<a href=\"https:\/\/app.mailgun.com\/app\/webhooks\" target=\"_tabs\" rel=\"noopener noreferrer\">steht ein Webhooks-Link<\/a>\u00a0 in der Navigationsleiste zur Verf\u00fcgung.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4570\" width=\"1024\" height=\"783\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/webhooks1.jpeg\" alt=\"webhooks1\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/webhooks1.jpeg 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/webhooks1-300x229.jpeg 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/webhooks1-768x587.jpeg 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Auf der Webhooks-Seite sind die verschiedenen Event-Typen aufgef\u00fchrt, f\u00fcr die Sie Event-Daten erhalten k\u00f6nnen. Indem Sie auf das Symbol &#8222;+&#8220; vor jedem Event klicken, <b>k\u00f6nnen Sie die URL festlegen, an die die Event-Daten gesendet werden.<\/b><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Daten verarbeiten<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um die an unsere Webhook-URL gesendeten Event-Daten zu verarbeiten, m\u00fcssen wir zun\u00e4chst wissen, wie die Daten aussehen werden. Die per POST gesendeten Parameter sind\u00a0<a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/user-manual\/tracking-messages\/#tracking-open-messages\" target=\"_tabs\" rel=\"noopener noreferrer\">in der API-Dokumentation<\/a>. Wir k\u00f6nnen noch einen Schritt weiter gehen und dies best\u00e4tigen, indem wir eine Test-Webhook-URL verwenden, die die Daten von Mailgun protokolliert. Daf\u00fcr k\u00f6nnen wir\u00a0<a href=\"http:\/\/bin.mailgun.net\/?utm_source=mailgun&amp;utm_medium=blog&amp;utm_campaign=webhooks-1710\" target=\"_tabs\" rel=\"noopener noreferrer\">Mailguns Postbin<\/a>\u00a0oder\u00a0<a href=\"https:\/\/requestbin.com\/\" target=\"_tabs\" rel=\"noopener noreferrer\">requestb.in<\/a>. <b>Diese Dienste generieren einen eindeutigen Endpunkt, den wir im Mailgun-Dashboard nutzen k\u00f6nnen, um Beispiel-Event-Daten zu erhalten<\/b>. Ich empfehle requestbin, da es mehr Details wie die Anfrage-Kopfzeilen bereitstellt. Diese Kopfzeilen sind wichtig, da man leicht \u00fcbersieht, dass Mailgun einige Daten mit dem Inhaltstyp\u00a0[<code>application\/x-www-form-urlencoded]<\/code>\u00a0und andere als\u00a0[<code>multipart\/form-data]<\/code> sendet. Wenn diese kleinen Details fehlen, \u00e4ndert sich die Art und Weise, wie Sie die Event-Daten erhalten, grundlegend.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lassen Sie uns einen Test-Endpunkt erstellen und sehen, wie die Event-Daten im Vergleich zu den Angaben in der Dokumentation aussehen.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Weitere Informationen zu <a href=\"https:\/\/requestbin.com\/\" target=\"_tabs\" rel=\"noopener noreferrer\">requestb.in<\/a> und einen Bin erstellen.<\/li>\n\n\n\n<li>Kopieren Sie die URL und \u00f6ffnen Sie <a href=\"https:\/\/app.mailgun.com\/app\/webhooks\" target=\"_tabs\" rel=\"noopener noreferrer\">den Webhooks-Bereich Ihres Mailgun-Dashboards<\/a>.<\/li>\n\n\n\n<li>F\u00fcgen Sie die URL in das Eingabefeld ein und klicken Sie auf den Link &#8222;Test Webhook&#8220;. Dadurch werden Beispiel-Event-Daten an die URL gesendet.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4571\" width=\"1024\" height=\"547\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screen-Shot-2019-04-12-at-3.18.54-PM.png\" alt=\"Screen-Shot-2019-04-12-at-3\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screen-Shot-2019-04-12-at-3.18.54-PM.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screen-Shot-2019-04-12-at-3.18.54-PM-300x160.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screen-Shot-2019-04-12-at-3.18.54-PM-768x410.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wiederholen Sie dies f\u00fcr alle Events, die f\u00fcr Sie von Interesse sind.<\/li>\n\n\n\n<li>Aktualisieren Sie Ihre requestbin-Seite, um die gesendeten Event-Daten anzuzeigen.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4572\" width=\"956\" height=\"343\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/requestbin-webhooks-data.png\" alt=\"requestbin-webhooks-data\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/requestbin-webhooks-data.png 956w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/requestbin-webhooks-data-300x108.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/requestbin-webhooks-data-768x276.png 768w\" sizes=\"(max-width: 956px) 100vw, 956px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Sie sich die requestbin-Daten genau ansehen, werden Sie bemerken, was zuvor \u00fcber die als multipart\/form-data gesendeten Daten erw\u00e4hnt wurde.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Da wir nun wissen, welche Parameter f\u00fcr jeden Event-Typ gelten und welchen Inhaltstyp sie haben k\u00f6nnen, ist es einfach, Code zur Verarbeitung der gesendeten Daten zu schreiben. Hier ist ein einfacher Code, der Details zu Beschwerden und verworfenen E-Mails ausgibt. (Ich verwende\u00a0<a href=\"https:\/\/github.com\/expressjs\/multer\" target=\"_tabs\" rel=\"noopener noreferrer\">multer<\/a>\u00a0zur Verarbeitung von multipart\/form-data.)<\/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                                Java                            <\/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-Java\">\r\n                                <code id=\"code_0_content\" class=\"language-Java\">\r\n\r\n                                    const express = require(&#039;express&#039;)  rn    , bodyParser = require(&#039;body-parser&#039;)rn    , multer = require(&#039;multer&#039;)rn    ;rnrnconst app = express();  rnapp.use(bodyParser.urlencoded({extended: false}));  rnapp.listen(process.env.PORT || 3000);rnrnapp.post(&#039;\/webhook&#039;, multer().none(), function(req, res) {  rn  const email = req.body.recipient;rn  const event = req.body.event;rnrn  if (event == &#039;complained&#039;) {rn    console.log(&lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;${email} complained about your mail&lt;\/code&gt;);rn  }rn  else if (event == &#039;dropped&#039;) {rn    console.log(&lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;Mail to ${email} dropped. ${event.description}&lt;\/code&gt;);rn  }rn  else if (event == &#039;bounced&#039;) {rn    console.log(&lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;Error ${event.code}: Mail to ${email} bounced. ${event.error}&lt;\/code&gt;);rn  }rnrn  res.end();rn});\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">Absicherung<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nichts hindert jemanden, der unsere Webhook-URL kennt, daran, falsche Event-Daten zu erstellen und an die URL zu senden. Zum Gl\u00fcck signiert Mailgun jede gesendete Anfrage und \u00fcbermittelt auch die folgenden Parameter:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>timestamp (Anzahl der seit dem 1. Januar 1970 vergangenen Sekunden)<\/li>\n\n\n\n<li>token (zuf\u00e4llig generierter String mit einer L\u00e4nge von 50 Zeichen)<\/li>\n\n\n\n<li>signature (durch einen HMAC-Algorithmus generierter hexadezimaler String)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Um das Token zu verifizieren, m\u00fcssen Sie Folgendes tun:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Die Werte von timestamp und token verketten.<\/li>\n\n\n\n<li>Den resultierenden String mit HMAC codieren, wobei Ihr HTTP-Webhook-Signaturschl\u00fcssel als Schl\u00fcssel und Sha256 als Algorithmus verwendet wird.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Das Ergebnis sollte mit der Signatur \u00fcbereinstimmen.<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So sieht das in Node.js aus:<\/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                                Java                            <\/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-Java\">\r\n                                <code id=\"code_0_content\" class=\"language-Java\">\r\n\r\n                                    const value = event_data_timestamp+event_data_token;  rnconst hash = crypto.createHmac(&#039;sha256&#039;, apikey)  rn                   .update(value)rn                   .digest(&#039;hex&#039;);rnif (hash !== event_data_signature) {  rn  console.log(&#039;Invalid signature&#039;);rn  return;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\">Wenn wir das zu unserem urspr\u00fcnglichen Code-Beispiel hinzuf\u00fcgen, sieht das in etwa so aus:<\/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                                Java                            <\/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-Java\">\r\n                                <code id=\"code_0_content\" class=\"language-Java\">\r\n\r\n                                    const express = require(&#039;express&#039;)  rn    , crypto = require(&#039;crypto&#039;)rn    , multer = require(&#039;multer&#039;)rn    , bodyParser = require(&#039;body-parser&#039;)rn    ;rnrnconst app = express();  rnapp.use(bodyParser.urlencoded({extended: false}));  rnapp.listen(process.env.PORT || 3000);rnrnapp.get(&#039;\/webhook&#039;, multer().none(), function(req, res) {  rn  \/\/ Validate signaturern  const value = req.body.timestamp+req.body.token;rn  const hash = crypto.createHmac(&#039;sha256&#039;,rn              process.env.API_KEY)rn                   .update(value)rn                   .digest(&#039;hex&#039;);rn  if (hash !== req.body.signature) {rn    console.log(&#039;Invalid signature&#039;);rn    return res.end();rn  }rnrn  \/\/ Log status of eventrn  const email = req.body.recipient;rn  const event = req.body.event;rnrn  if (event == &#039;complained&#039;) {rn    console.log(&lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;${email} complained about your mail&lt;\/code&gt;);rn  }rn  else if (event == &#039;dropped&#039;) {rn    console.log(&lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;Mail to ${email} dropped. ${event.description}&lt;\/code&gt;);rn  }rn  else if (event == &#039;bounced&#039;) {rn    console.log(&lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;Error ${event.code}: Mail to ${email} bounced. ${event.error}&lt;\/code&gt;);rn  }rnrn  res.end();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\">Wir k\u00f6nnen das sogar noch erweitern und:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>F\u00fcr jede Anfrage eine \u00dcberpr\u00fcfung anhand eines Token-Caches durchf\u00fchren, um die Verwendung desselben Tokens zu verhindern. Jedes Token wird dort gespeichert. Dies verhindert Replay-Angriffe.<\/li>\n\n\n\n<li>\u00dcberpr\u00fcfen, ob der Zeitstempel nicht zu weit von der aktuellen Uhrzeit entfernt ist.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Skalierbarkeit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Sie viele E-Mails versenden und viele Events erwarten, ist es keine gute Idee, Ihr Webhook-Skript auf einem Server abzulegen, der nicht automatisch skaliert. Selbst wenn Sie nicht viele Events erwarten, k\u00f6nnen unerwartete Vorf\u00e4lle zu einem sprunghaften Anstieg f\u00fchren. In solchen F\u00e4llen ist ein Server, der automatisch skaliert, \u00e4u\u00dferst n\u00fctzlich.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier kommt\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Serverless_computing\" target=\"_tabs\" rel=\"noopener noreferrer\">Serverless Computing<\/a>. Einfach ausgedr\u00fcckt besteht die Idee darin, dass Sie die Ausf\u00fchrung Ihres Codes und alle damit verbundenen Aufgaben an einen Anbieter delegieren k\u00f6nnen. Mehrere Instanzen Ihres Codes k\u00f6nnen parallel ausgef\u00fchrt werden, und Sie k\u00f6nnen Rechenressourcen wie RAM sowie die Ausf\u00fchrungszeit spontan anpassen. Dadurch wird eine hohe Skalierbarkeit erreicht. <b>Zudem erfolgt die Abrechnung basierend auf den verbrauchten Ressourcen und der Ausf\u00fchrungszeit. Es kann also sehr kosteng\u00fcnstig sein, wenn Sie nicht regelm\u00e4\u00dfig viele E-Mails versenden.<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es gibt einige Anbieter f\u00fcr Serverless Computing. Ein Anbieter, den ich nutze und empfehle, ist\u00a0<a href=\"https:\/\/cloud.google.com\/functions\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Google Cloud Functions<\/a>\u00a0, da sich HTTP-Funktionen damit sehr einfach einrichten lassen. Eine HTTP-Funktion ist ein Codeblock, der als Funktion verpackt ist und durch das Aufrufen einer URL getriggert werden kann. Genau das ben\u00f6tigen wir f\u00fcr unseren Webhook.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um diese Funktion zu erstellen, m\u00fcssen wir eine JavaScript-Funktion schreiben, die als Node.js-Modul exportiert wird. Die Funktion erfordert HTTP-spezifische Argumente:\u00a0<code>request<\/code>\u00a0und\u00a0<code>response<\/code>.<\/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                                Java                            <\/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-Java\">\r\n                                <code id=\"code_0_content\" class=\"language-Java\">\r\n\r\n                                    exports.webhook = function(request, response) {  rn  \/\/ Handle event data herern  response.send({status:&quot;ok&quot;});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\">Basierend auf dem Inhaltstyp der Anfrage wird der Body der Anfrage automatisch \u00fcbergeben und ist im Parameter\u00a0<code>body<\/code>\u00a0des Anfrage-Objekts verf\u00fcgbar.<\/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                                Java                            <\/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-Java\">\r\n                                <code id=\"code_0_content\" class=\"language-Java\">\r\n\r\n                                    exports.webhook = function(request, response) {  rn  let event = request.body.event; \/\/ deliveredrn  \/\/ Handle event data herern  \/\/ ...rn  response.send({status:&quot;ok&quot;});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\"><b>Dies funktioniert jedoch nicht beim Inhaltstyp multipart\/form-data<\/b>. Und wie wir bereits wissen, sendet Mailgun einige Daten als multipart\/form-data. Wir k\u00f6nnen eine Bibliothek wie\u00a0<a href=\"https:\/\/github.com\/expressjs\/multer\" target=\"_tabs\" rel=\"noopener noreferrer\">Multer<\/a>\u00a0mithilfe von\u00a0<code>require()<\/code> einbinden. Wir m\u00fcssen jedoch sicherstellen, dass die Abh\u00e4ngigkeit in der Datei\u00a0<b>package.json<\/b>\u00a0aufgef\u00fchrt ist.<\/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                                Java                            <\/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-Java\">\r\n                                <code id=\"code_0_content\" class=\"language-Java\">\r\n\r\n                                    const multer = require(&#039;multer&#039;);rnrnexports.webhook = function(request, response) {  rn  parser(request, response, function(){rn    console.log(request.body); \/\/ Our event datarn    \/\/ Handle event data herern    \/\/ ...rn    response.send({status:&quot;ok&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    <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                                Java                            <\/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-Java\">\r\n                                <code id=\"code_0_content\" class=\"language-Java\">\r\n\r\n                                    {rn  &quot;dependencies&quot;: {rn    &quot;multer&quot;: &quot;^1.3.0&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\">Als N\u00e4chstes k\u00f6nnen wir die Funktion in\u00a0<a href=\"https:\/\/cloud.google.com\/functions\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Cloud Functions<\/a>. \u00a0ver\u00f6ffentlichen. Ein einfacher Weg daf\u00fcr ist das Cloud Functions-Dashboard.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00d6ffnen Sie Ihre <a href=\"https:\/\/console.cloud.google.com\/start\" target=\"_tabs\" rel=\"noopener noreferrer\">Google Cloud Console<\/a>  (falls Sie noch kein Konto haben, erstellen Sie eines).<\/li>\n\n\n\n<li>Aktivieren Sie Cloud Functions im Dashboard.<\/li>\n\n\n\n<li>Klicken Sie auf &#8222;Funktion erstellen&#8220;.<\/li>\n\n\n\n<li>Geben Sie einen Namen f\u00fcr Ihre Funktion ein (z.\u00a0B. &#8222;mailgun-webhook&#8220;).<\/li>\n\n\n\n<li>W\u00e4hlen Sie im Bereich f\u00fcr Trigger &#8222;HTTP-Trigger&#8220; aus. Notieren Sie sich die URL, denn dies ist Ihre Webhook-URL.<\/li>\n\n\n\n<li>Kopieren Sie Ihren Code zur Verarbeitung der Event-Daten in den Bereich i<i>ndex.js <\/i> der Cloud-Funktion.<\/li>\n\n\n\n<li>Kopieren Sie den Inhalt Ihrer <b>package.json <\/b>und f\u00fcgen Sie ihn im Bereich <i>package.json <\/i>ein.<\/li>\n\n\n\n<li>W\u00e4hlen Sie ein <i>Stage-Bucket<\/i> aus oder erstellen Sie eines. Das Stage-Bucket ist einfach der Ort, an dem der Code bereitgestellt wird. Hier k\u00f6nnen Sie alles Beliebige verwenden.<\/li>\n\n\n\n<li>Geben Sie unter <i>Auszuf\u00fchrende Funktion<\/i> den Namen Ihrer Funktion ein (z.\u00a0B. &#8222;webhook&#8220;).<\/li>\n\n\n\n<li>Speichern.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Verwenden Sie nun die URL der Funktion in Mailgun als Ihre Webhook-URL.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Das Arbeiten mit Mailgun-Webhooks ist unkompliziert. Es gibt viele M\u00f6glichkeiten, die Event-Daten zu nutzen, um Ihre Anwendungen au\u00dferhalb von Mailgun anzureichern. Wenn Sie beispielsweise Ihrer Nutzerschaft erm\u00f6glichen, E-Mails aus irgendeinem Grund von Ihrer Website zu versenden, und Sie Mailgun nutzen, verwenden Sie Webhooks, um ihnen Analysen bereitzustellen. Oder vielleicht m\u00f6chten Sie Ihre E-Mail-Analysen an eine andere Plattform senden. Oder vielleicht m\u00f6chten Sie \u00fcber Fehler in Ihrer\u00a0<a href=\"https:\/\/slack.com\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Slack<\/a>\u00a0Konto. Vielleicht auch das nicht, sondern Sie m\u00f6chten einfach nur detailliertere Analysen. Was auch immer der Anwendungsfall ist, <b>die Event-Daten stehen Ihnen zur Verf\u00fcgung.<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Praxisbeispiel finden Sie im Quellcode der\u00a0<a href=\"https:\/\/github.com\/kehers\/suet\/blob\/master\/workers\/hooks\/index.js\" target=\"_tabs\" rel=\"noopener noreferrer\">Webhook-Datei von Suet<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><i>M\u00f6chten Sie Mailgun-Webhooks ausprobieren? Registrieren<\/i><\/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_6e20e9f9a52c803560cbd9a0b964ca35\">\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_6e20e9f9a52c803560cbd9a0b964ca35\">\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\n\n\n<p class=\"wp-block-paragraph\"><i>Und falls Sie Starthilfe bei Mailgun ben\u00f6tigen,\u00a0<\/i><a href=\"https:\/\/www.crowdcast.io\/e\/getting-started-with-mailgun?utm_source=mailgun&amp;utm_medium=blog&amp;utm_campaign=webhooks-1710\" target=\"_tabs\" rel=\"noopener noreferrer\"><i>sehen Sie sich dieses kostenlose Mailgun-Training an<\/i><\/a><i>! Unser Team Lead of Customer Support, Chris Hammer, f\u00fchrt Sie durch den Einrichtungsprozess und hilft Ihnen bei den ersten Schritten zum Senden, Empfangen und Tracken Ihrer E-Mails mit Mailgun.<\/i><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Erfahren Sie in diesem Gastbeitrag von einem Mailgun-Kunden, wie Sie Webhooks einrichten, Daten aus Ihren Transaktions-E-Mails verarbeiten und Webhook-Daten sichern.<\/p>\n","protected":false},"author":13,"featured_media":4555,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[22],"class_list":["post-23386","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-product"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Ein praktischer Leitfaden zur Nutzung von Mailgun-Webhooks - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Erfahren Sie in diesem Gastbeitrag von einem Mailgun-Kunden, wie Sie Webhooks einrichten, Daten aus Ihren Transaktions-E-Mails verarbeiten und Webhook-Daten sichern.\" \/>\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\/product\/a-guide-to-using-mailguns-webhooks\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ein praktischer Leitfaden zur Nutzung von Mailgun-Webhooks - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Erfahren Sie in diesem Gastbeitrag von einem Mailgun-Kunden, wie Sie Webhooks einrichten, Daten aus Ihren Transaktions-E-Mails verarbeiten und Webhook-Daten sichern.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/de\/blog\/product\/a-guide-to-using-mailguns-webhooks\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-16T02:53:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.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=\"7\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\\\/product\\\/a-guide-to-using-mailguns-webhooks\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/product\\\/a-guide-to-using-mailguns-webhooks\\\/\",\"name\":\"Ein praktischer Leitfaden zur Nutzung von Mailgun-Webhooks - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/product\\\/a-guide-to-using-mailguns-webhooks\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/product\\\/a-guide-to-using-mailguns-webhooks\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Product.png\",\"datePublished\":\"2026-09-16T02:53:17+00:00\",\"dateModified\":\"2026-09-16T02:53:18+00:00\",\"description\":\"Erfahren Sie in diesem Gastbeitrag von einem Mailgun-Kunden, wie Sie Webhooks einrichten, Daten aus Ihren Transaktions-E-Mails verarbeiten und Webhook-Daten sichern.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/product\\\/a-guide-to-using-mailguns-webhooks\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/product\\\/a-guide-to-using-mailguns-webhooks\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/product\\\/a-guide-to-using-mailguns-webhooks\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Product.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Product.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/product\\\/a-guide-to-using-mailguns-webhooks\\\/#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\":\"Ein praktischer Leitfaden zur Nutzung von Mailgun-Webhooks\"}]},{\"@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":"Ein praktischer Leitfaden zur Nutzung von Mailgun-Webhooks - Transactional Email API Service For Developers | Mailgun","description":"Erfahren Sie in diesem Gastbeitrag von einem Mailgun-Kunden, wie Sie Webhooks einrichten, Daten aus Ihren Transaktions-E-Mails verarbeiten und Webhook-Daten sichern.","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\/product\/a-guide-to-using-mailguns-webhooks\/","og_locale":"de_DE","og_type":"article","og_title":"Ein praktischer Leitfaden zur Nutzung von Mailgun-Webhooks - Transactional Email API Service For Developers | Mailgun","og_description":"Erfahren Sie in diesem Gastbeitrag von einem Mailgun-Kunden, wie Sie Webhooks einrichten, Daten aus Ihren Transaktions-E-Mails verarbeiten und Webhook-Daten sichern.","og_url":"https:\/\/www.mailgun.com\/de\/blog\/product\/a-guide-to-using-mailguns-webhooks\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","article_modified_time":"2026-09-16T02:53:18+00:00","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"7\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/de\/blog\/product\/a-guide-to-using-mailguns-webhooks\/","url":"https:\/\/www.mailgun.com\/de\/blog\/product\/a-guide-to-using-mailguns-webhooks\/","name":"Ein praktischer Leitfaden zur Nutzung von Mailgun-Webhooks - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/product\/a-guide-to-using-mailguns-webhooks\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/product\/a-guide-to-using-mailguns-webhooks\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png","datePublished":"2026-09-16T02:53:17+00:00","dateModified":"2026-09-16T02:53:18+00:00","description":"Erfahren Sie in diesem Gastbeitrag von einem Mailgun-Kunden, wie Sie Webhooks einrichten, Daten aus Ihren Transaktions-E-Mails verarbeiten und Webhook-Daten sichern.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/product\/a-guide-to-using-mailguns-webhooks\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/de\/blog\/product\/a-guide-to-using-mailguns-webhooks\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.mailgun.com\/de\/blog\/product\/a-guide-to-using-mailguns-webhooks\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/de\/blog\/product\/a-guide-to-using-mailguns-webhooks\/#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":"Ein praktischer Leitfaden zur Nutzung von Mailgun-Webhooks"}]},{"@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\/23386","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\/13"}],"version-history":[{"count":1,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/23386\/revisions"}],"predecessor-version":[{"id":23388,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/23386\/revisions\/23388"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/media\/4555"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/media?parent=23386"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog_category?post=23386"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}