{"id":19887,"date":"2026-09-14T16:22:13","date_gmt":"2026-09-14T16:22:13","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/transaktions-email-workflows-passwort-zuruecksetzen-erstellen\/"},"modified":"2026-09-14T16:22:14","modified_gmt":"2026-09-14T16:22:14","slug":"transaktions-email-workflows-passwort-zuruecksetzen-erstellen","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-email-workflows-passwort-zuruecksetzen-erstellen\/","title":{"rendered":"Transaktions-E-Mail-Workflows f\u00fcr das Zur\u00fccksetzen von Passw\u00f6rtern mit der Mailgun-API erstellen"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/mailchimp.com\/marketing-glossary\/transactional-email\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Transaktions-E-Mails<\/a> sind automatisierte E-Mails, die durch Nutzeraktionen auf einer Website, in einer App oder bei einem Service ausgel\u00f6st werden. Im Gegensatz zu <a href=\"https:\/\/www.brevo.com\/blog\/what-is-email-marketing\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Marketing-E-Mails<\/a>, die Produkte oder Dienstleistungen bewerben, liefern Transaktions-E-Mails wichtige Informationen, oft in Echtzeit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Transaktions-E-Mail-Workflows gehen noch einen Schritt weiter, indem sie eine Abfolge von E-Mails basierend auf Nutzeraktionen automatisieren, um eine zeitnahe Kommunikation und ein reibungsloses Nutzererlebnis zu gew\u00e4hrleisten. Unternehmen verlassen sich auf Dienste wie <a href=\"https:\/\/www.mailgun.com\/de\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Mailgun<\/a> f\u00fcr Transaktions-E-Mails, da diese umgehend, relevant und durch unmittelbare Nutzeraktionen ausgel\u00f6st werden. So erm\u00f6glicht der Workflow beispielsweise einem Nutzer, sein Passwort schnell zur\u00fcckzusetzen und wieder Zugriff auf sein Konto zu erhalten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In diesem Tutorial erfahren Sie, wie Sie einen Transaktions-E-Mail-Workflow f\u00fcr das Zur\u00fccksetzen von Passw\u00f6rtern mit der Mailgun-API erstellen.<\/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-1970\"><p class=\"h5 m-0\" id=\"toc-title-1970\">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=\"#einrichten-eines-mailgun-kontos\">Einrichten eines Mailgun-Kontos<\/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=\"#einen-api-schluessel-abrufen\">Einen API-Schl\u00fcssel abrufen<\/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=\"#erstellung-der-anwendungsschnittstelle-mit-fastapi\">Erstellung der Anwendungsschnittstelle mit FastAPI<\/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=\"#eine-verbindung-zu-mailgun-einrichten\">Eine Verbindung zu Mailgun einrichten<\/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-vorlage-entwerfen-und-einrichten\">E-Mail-Vorlage entwerfen und einrichten<\/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-funktion-fuer-den-e-mail-versand\">Implementierung der Funktion f\u00fcr den E-Mail-Versand<\/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=\"#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\">09<\/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\">Einrichten eines Mailgun-Kontos<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Sie noch kein Mailgun-Konto haben, m\u00fcssen Sie als Erstes <a href=\"https:\/\/signup.mailgun.com\/new\/signup\" target=\"_tabs\" rel=\"noopener noreferrer\">eines erstellen<\/a>. Pr\u00fcfen Sie unbedingt die mit Ihrem Mailgun-Konto verkn\u00fcpfte E-Mail-Adresse und verifizieren Sie Ihr Konto:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3961\" width=\"888\" height=\"572\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/1__1_.png\" alt=\"Account Verification Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/1__1_.png 888w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/1__1_-300x193.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/1__1_-768x495.png 768w\" sizes=\"(max-width: 888px) 100vw, 888px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Geben Sie anschlie\u00dfend Ihre Telefonnummer und den bereitgestellten Autorisierungscode ein, um Ihr Konto zu aktivieren:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3963\" width=\"1348\" height=\"502\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/2__1_.png\" alt=\"Account Verification Phone Number image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/2__1_.png 1348w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/2__1_-300x112.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/2__1_-768x286.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/2__1_-1024x381.png 1024w\" sizes=\"(max-width: 1348px) 100vw, 1348px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Sobald Ihr Mailgun-Konto eingerichtet ist, m\u00fcssen Sie einen API-Schl\u00fcssel abrufen, um den Dienst nutzen zu k\u00f6nnen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Einen API-Schl\u00fcssel abrufen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Damit Ihre Anwendung mit den Diensten von Mailgun interagieren kann, muss sie \u00fcber einen API-Schl\u00fcssel authentifiziert werden. Um Ihren API-Schl\u00fcssel zu erhalten, navigieren Sie zum Mailgun-Dashboard und w\u00e4hlen Sie links <b>Erste Schritte<\/b> aus, um den <b>Leitfaden f\u00fcr die ersten Schritte<\/b> anzuzeigen:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3964\" width=\"1554\" height=\"688\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/3__1_.png\" alt=\"API Get Started Guide Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/3__1_.png 1554w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/3__1_-300x133.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/3__1_-768x340.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/3__1_-1024x453.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/3__1_-1536x680.png 1536w\" sizes=\"(max-width: 1554px) 100vw, 1554px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Klicken Sie auf die Schaltfl\u00e4che <b>Erste Schritte<\/b> unter <b>API-Schl\u00fcssel erstellen<\/b>. Geben Sie anschlie\u00dfend eine Beschreibung ein, die den Hauptzweck der API passend beschreibt. Wenn der API-Schl\u00fcssel beispielsweise f\u00fcr Prozesse zur Nutzerauthentifizierung gedacht ist, nennen Sie ihn etwa user_authentication und klicken Sie auf <b>Schl\u00fcssel erstellen<\/b>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3969\" width=\"1536\" height=\"656\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/4__2_.png\" alt=\"Create New API Key Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/4__2_.png 1536w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/4__2_-300x128.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/4__2_-768x328.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/4__2_-1024x437.png 1024w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Stellen Sie sicher, dass Sie diesen Schl\u00fcssel kopieren und sicher aufbewahren, da der Schl\u00fcssel nur dieses eine Mal angezeigt wird:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3973\" width=\"1540\" height=\"678\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/5__2_.png\" alt=\"New API Key Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/5__2_.png 1540w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/5__2_-300x132.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/5__2_-768x338.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/5__2_-1024x451.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/5__2_-1536x676.png 1536w\" sizes=\"(max-width: 1540px) 100vw, 1540px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Erstellung der Anwendungsschnittstelle mit FastAPI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um die Anwendungsschnittstelle zu erstellen, die den E-Mail-Workflow antreibt, m\u00fcssen Sie als Erstes die erforderlichen Bibliotheken installieren. Erstellen Sie vorher ein Projektverzeichnis, indem Sie <code>mkdir my_fastapi_app<\/code> ausf\u00fchren, und starten Sie ein <a href=\"https:\/\/www.freecodecamp.org\/news\/how-to-setup-virtual-environments-in-python\/\" target=\"_tabs\" rel=\"noopener noreferrer\">virtuelle Umgebung<\/a> in dem Verzeichnis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Installieren Sie dann die erforderlichen Bibliotheken mit dem folgenden Befehl:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>pip install fastapi jinja2 requests uvicorn python-multipart<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier installieren Sie:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>fastapi<\/code>, das als prim\u00e4res Backend-Framework dient<\/li>\n\n\n\n<li><code>jinja2<\/code>, das Ihre Frontend-Vorlagen bereitstellt<\/li>\n\n\n\n<li><code>requests<\/code>, das HTTP-Anfragen an die Mailgun-API sendet<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Obwohl FastAPI prim\u00e4r f\u00fcr die Erstellung von APIs gedacht ist, erm\u00f6glicht das Hinzuf\u00fcgen der Bibliothek <code>jinja2<\/code> eine Full-Stack-Entwicklung\u00a0\u2013 was jedoch eine korrekte Verzeichnisstruktur erfordert. Ihre Projektstruktur sollte folgendes Format haben:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>my_fastapi_app\/<br>\n\u2502\u2500\u2500 main.py # Hauptdatei der FastAPI-Anwendung<br>\n\u2502\u2500\u2500 users.json # JSON-Datei zum Speichern von Nutzerdaten<br>\n\u2502\u2500\u2500 templates\/ # Ordner f\u00fcr HTML-Vorlagen<br>\n\u2502 \u251c\u2500\u2500 login.html # Anmeldeseite<br>\n\u2502 \u251c\u2500\u2500 home.html # Startseite<br>\n\u2502 \u251c\u2500\u2500 passwordReset.html # Seite zum Zur\u00fccksetzen des Passworts<br>\n\u2502\u2500\u2500 static\/ # Ordner f\u00fcr statische Dateien<br>\n\u2502 \u251c\u2500\u2500 styles.css # Stile f\u00fcr die Dateien login.html und passwordReset.html<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sie finden den gesamten Code f\u00fcr dieses Tutorial in <a href=\"https:\/\/github.com\/EphraimX\/building-transactional-email-workflows-for-password-resets-with-mailgun-api\" target=\"_tabs\" rel=\"noopener noreferrer\">diesem GitHub-Repository<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sobald Ihre Projektstruktur steht, kopieren Sie den Code entweder und f\u00fcgen ihn in die entsprechenden Dateien ein oder klonen das obige GitHub-Repository mit dem folgenden Befehl:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>git clone https:\/\/github.com\/EphraimX\/building-transactional-email-workflows-for-password-resets-with-mailgun-api.git<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sehen wir uns den ersten Abschnitt der Datei main.py an. In dieser Datei geschieht die ganze Magie, da sie die Frontend- und Backend-Vorg\u00e4nge miteinander verbindet:<\/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 osrnimport jsonrnimport uuidrnimport requestsrnimport urllib.parsernfrom fastapi import FastAPI, Request, Formrnfrom pydantic import BaseModelrnfrom fastapi.responses import HTMLResponsernfrom fastapi.staticfiles import StaticFilesrnfrom fastapi.templating import Jinja2Templatesrnrnapp = FastAPI()rnapp.mount(&quot;\/static&quot;, StaticFiles(directory=&quot;static&quot;), name=&quot;static&quot;)rntemplates = Jinja2Templates(directory=&quot;templates&quot;)rnrnclass loginData(BaseModel):rn    username: strrn    password: strrnrn@app.get(&quot;\/login&quot;, response_class=HTMLResponse)rnasync def login(request: Request):rn    return templates.TemplateResponse(&quot;login.html&quot;, {&quot;request&quot;: request, &quot;message&quot;: &quot;&quot;})rnrn@app.get(&quot;\/passwordResetView\/&quot;, response_class=HTMLResponse)rnasync def password_reset_view(request: Request):rn    return templates.TemplateResponse(rn        &quot;passwordReset.html&quot;, {&quot;request&quot;: request, &quot;message&quot;: &quot;&quot;}rn    )rnrn@app.post(&quot;\/home&quot;, response_class=HTMLResponse)rnasync def password_reset(rn    request: Request, email_address: str = Form(...), password: str = Form(...)rn):rnrn    # Open and read the JSON DB filern    try:rn        with open(&quot;users.json&quot;, &quot;r&quot;) as file:rn            users = json.load(file)rn    except (FileNotFoundError, json.JSONDecodeError):rn        users = []rnrn    for user in users:rnrn        if user[&quot;email_address&quot;] == email_address and user[&quot;password&quot;] == password:rn            return templates.TemplateResponse(&quot;home.html&quot;, {&quot;request&quot;: request})rnrn    # If no match was found, return an error messagern    return templates.TemplateResponse(rn        &quot;login.html&quot;,rn        {rn            &quot;request&quot;: request,rn            &quot;message&quot;: &quot;Email or Password Incorrect. If you cannot remember your password, kindly reset it.&quot;,rn        },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\">In diesem Code \u00fcbernimmt die App die Authentifizierung, indem sie Seiten f\u00fcr die Anmeldung und das Zur\u00fccksetzen von Passw\u00f6rtern bereitstellt und gleichzeitig die Anmeldeinformationen in der Datei <code>users.json<\/code> \u00fcberpr\u00fcft. Die App initialisiert FastAPI, konfiguriert Vorlagen und definiert ein loginData-Modell f\u00fcr die Validierung. Die Routen <code>\/login <\/code> und <code>\/passwordResetView\/ <\/code> stellen ihre jeweiligen Seiten bereit, w\u00e4hrend \/home die Anmeldeinformationen \u00fcberpr\u00fcft und g\u00fcltige Nutzer weiterleitet oder Fehler anzeigt. Die Funktion zum Zur\u00fccksetzen von Passw\u00f6rtern generiert mithilfe von uuid einen eindeutigen Link und sendet diesen \u00fcber die Mailgun-API.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um dies zu testen, \u00f6ffnen Sie Ihre Behelfsdatenbank (<code>users.json<\/code>) und f\u00fcgen Sie Folgendes ein:<\/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                                    [rn    {rn        &quot;username&quot; : &quot;sinchy&quot;,rn        &quot;email_address&quot; : &quot;sinch@gmail.com&quot;,rn        &quot;password&quot; : &quot;sinch12345&quot;rn    },rn    {rn        &quot;username&quot; : &quot;grinchy&quot;,rn        &quot;email_address&quot; : &quot;rinch@gmail.com&quot;,rn        &quot;password&quot; : &quot;grinch67890&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\">Sie sollten zudem  <a href=\"https:\/\/help.mailgun.com\/hc\/en-us\/articles\/217531258-Authorized-Recipients\" target=\"_tabs\" rel=\"noopener noreferrer\">die Autorisierung<\/a>  f\u00fcr diese E-Mail-Adressen \u00fcber das Mailgun-Dashboard vornehmen, falls Sie eine Sandbox-Domain verwenden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Starten Sie Ihre Anwendung, indem Sie den Befehl uvicorn main:app &#8211;reload ausf\u00fchren. Gehen Sie dann zu <a href=\"http:\/\/localhost:8000\/login\" target=\"_tabs\" rel=\"noopener noreferrer\">http:\/\/localhost:8000\/login<\/a>, wo Sie Folgendes sehen sollten:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3979\" width=\"1536\" height=\"718\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/6__2_.png\" alt=\"API Login Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/6__2_.png 1536w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/6__2_-300x140.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/6__2_-768x359.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/6__2_-1024x479.png 1024w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Sie versuchen, sich mit den Anmeldeinformationen in der Datei users.json anzumelden, werden Sie zur Startseite weitergeleitet:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3981\" width=\"1538\" height=\"716\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/7__1_.png\" alt=\"Successful API Login Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/7__1_.png 1538w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/7__1_-300x140.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/7__1_-768x358.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/7__1_-1024x477.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/7__1_-1536x715.png 1536w\" sizes=\"(max-width: 1538px) 100vw, 1538px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Sie die falschen Anmeldeinformationen eingeben, sehen Sie Folgendes:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3982\" width=\"1540\" height=\"716\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/8__1_.png\" alt=\"Unsuccessful API Login Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/8__1_.png 1540w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/8__1_-300x139.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/8__1_-768x357.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/8__1_-1024x476.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/8__1_-1536x714.png 1536w\" sizes=\"(max-width: 1540px) 100vw, 1540px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Eine Verbindung zu Mailgun einrichten<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um E-Mails \u00fcber Mailgun zu versenden, m\u00fcssen Sie eine Verbindung zwischen Ihrer Anwendung und dem E-Mail-Service von Mailgun herstellen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6ffnen Sie dazu die Datei main.py und f\u00fcgen Sie den folgenden Code ein. Ersetzen Sie dabei <code><\/code>, <code><\/code> und  durch g\u00fcltige Werte:<\/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                                    def send_simple_message(API_KEY):rn    response = requests.post(rn        &quot;https:\/\/api.mailgun.net\/v3\/&lt;SANDBOX_URL&gt;\/messages&quot;,rn        auth=(&quot;api&quot;, f&quot;{API_KEY}&quot;),rn        data={&quot;from&quot;: &quot;Mailgun Sandbox &lt;postmaster@&lt;SANDBOX_URL&gt;&gt;&quot;,rn              &quot;to&quot;: &quot;&lt;RECIPIENT_NAME&gt; &lt;RECIPIENT_EMAIL&gt;&quot;,rn              &quot;subject&quot;: &quot;Hello &lt;RECIPIENT_NAME&gt;&quot;,rn              &quot;text&quot;: &quot;Congratulations &lt;RECIPIENT_NAME&gt;, you just sent an email with Mailgun! You are truly awesome!&quot;rn              }rn    )rnrn    print(response.json())rn    return responsern\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\">\u00dcbergeben Sie zu Testzwecken Ihren API-Schl\u00fcssel direkt beim Aufruf der Funktion:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>send_simple_message(\"your-api-key-here\")<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fchren Sie das Skript mit folgendem Befehl aus:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>python main.py<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn dies erfolgreich war, gibt die Funktion eine Antwort \u00e4hnlich wie diese aus:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>{<br>\n\"id\": \"\",<br>\n\"message\": \"Queued. Thank you.\"<br>\n}<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dies best\u00e4tigt, dass die E-Mail-Anfrage erfolgreich von Mailgun in die Warteschlange eingereiht wurde.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">E-Mail-Vorlage entwerfen und einrichten<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um an der Logik zum Zur\u00fccksetzen von Passw\u00f6rtern zu arbeiten, m\u00fcssen Sie die Vorlage f\u00fcr die E-Mail entwerfen, die an den Nutzer gesendet wird. Mit Mailgun gibt es zwei M\u00f6glichkeiten, eine E-Mail zu entwerfen: mit HTML oder mit dem Drag-and-Drop-Vorlagen-Builder von Mailgun. Hier verwenden Sie den HTML-Ansatz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um mit dem Entwurf zu beginnen, gehen Sie in Ihr Mailgun-Dashboard und navigieren Sie zu <b>Senden &gt; Versand &gt; Vorlagen<\/b>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3985\" width=\"1532\" height=\"678\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/9__1_.png\" alt=\"Templates Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/9__1_.png 1532w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/9__1_-300x133.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/9__1_-768x340.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/9__1_-1024x453.png 1024w\" sizes=\"(max-width: 1532px) 100vw, 1532px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Klicken Sie als N\u00e4chstes auf <b>Nachrichtenvorlage erstellen<\/b>, w\u00e4hlen Sie die Option f\u00fcr die Programmierung in HTML und klicken Sie auf die Vorlage <b>Leer<\/b>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3989\" width=\"1532\" height=\"648\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/10.png\" alt=\"Blank Option image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/10.png 1532w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/10-300x127.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/10-768x325.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/10-1024x433.png 1024w\" sizes=\"(max-width: 1532px) 100vw, 1532px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcllen Sie das Formular f\u00fcr die Vorlage mit dem Namen, der Beschreibung und den Details der E-Mail aus:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3995\" width=\"1570\" height=\"682\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/11.png\" alt=\"Template Details image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/11.png 1570w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/11-300x130.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/11-768x334.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/11-1024x445.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/11-1536x667.png 1536w\" sizes=\"(max-width: 1570px) 100vw, 1570px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Scrollen Sie dann nach unten zum Tab <b>Editor<\/b> und kopieren Sie den Code aus der Datei  <a href=\"https:\/\/github.com\/EphraimX\/building-transactional-email-workflows-for-password-resets-with-mailgun-api\/blob\/main\/building-transactional-email-workflows-for-password-resets-with-mailgun-api\/email_template.html\" target=\"_tabs\" rel=\"noopener noreferrer\">email_template.html<\/a> Datei:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-3998\" width=\"1560\" height=\"710\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/12.png\" alt=\"Template Editor Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/12.png 1560w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/12-300x137.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/12-768x350.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/12-1024x466.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/12-1536x699.png 1536w\" sizes=\"(max-width: 1560px) 100vw, 1560px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Sie den Tab <b>Testdaten<\/b> ausw\u00e4hlen, sehen Sie zwei dynamische Variablen: <code>username<\/code> und <code>reset_link<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W\u00e4hlen Sie den Tab <b>Vorschau<\/b>, um die Vorlage zu sehen:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4005\" width=\"1550\" height=\"768\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/13.png\" alt=\"Reset Password Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/13.png 1550w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/13-300x149.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/13-768x381.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/13-1024x507.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/13-1536x761.png 1536w\" sizes=\"(max-width: 1550px) 100vw, 1550px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Klicken Sie abschlie\u00dfend auf die Schaltfl\u00e4che <b>Erstellen<\/b>, um sie zu erstellen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Implementierung der Funktion f\u00fcr den E-Mail-Versand<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sobald Ihre E-Mail-Vorlage fertig ist, k\u00f6nnen Sie die Funktion zum Versenden von E-Mails entwickeln. \u00d6ffnen Sie die Datei <code>main.py<\/code> und f\u00fcgen Sie den folgenden Code ein:<\/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                                    @app.post(&quot;\/resetPassword\/&quot;)rnasync def reset_password(request: Request, email_address: str = Form(...)):rnrn    # Open and read the JSON DB filern    try:rn        with open(&quot;users.json&quot;, &quot;r&quot;) as file:rn            users = json.load(file)rn    except (FileNotFoundError, json.JSONDecodeError):rn        users = []rnrn    for user in users:rn        if user[&quot;email_address&quot;] == email_address:rnrn            email_address = user[&quot;email_address&quot;]rn            username = user[&quot;username&quot;]rn            reset_link = await generate_password_reset_link(email_address)rnrn            response = await send_password_reset_email(rn                username, email_address, reset_linkrn            )rnrn            if response[&quot;success&quot;]:rnrn                return templates.TemplateResponse(rn                    &quot;login.html&quot;,rn                    {rn                        &quot;request&quot;: request,rn                        &quot;message&quot;: &quot;Kindly check your email to reset your password.&quot;,rn                    },rn                )rnrn            else:rnrn                return templates.TemplateResponse(rn                    &quot;passwordReset.html&quot;,rn                    {rn                        &quot;request&quot;: request,rn                        &quot;message&quot;: &quot;Unfortunately, we ran into an error while trying to reset your password. Kindly try again, and if the issue persists, please contact support.&quot;,rn                    },rn                )rnrn    # If no match was found, return an error messagern    return templates.TemplateResponse(rn        &quot;passwordReset.html&quot;,rn        {rn            &quot;request&quot;: request,rn            &quot;message&quot;: &quot;Unfortunately, we do not have a record of your email. Kindly reach out to the site administrator.&quot;,rn        },rn    )rnrnasync def send_password_reset_email(username, email_address, reset_link):rnrn    API_KEY = os.getenv(&quot;API_KEY&quot;)  # Fetch API key from environmentrnrn    if not API_KEY:rn        print(&quot;Error: API_KEY is not set!&quot;)rn        return {&quot;success&quot;: False, &quot;error&quot;: &quot;API key is missing&quot;}rnrn    try:rn        response = requests.post(rn            &quot;https:\/\/api.mailgun.net\/v3\/&lt;SANDBOX_URL&gt;\/messages&quot;,rn            auth=(&quot;api&quot;, API_KEY),rn            data={rn                &quot;from&quot;: &quot;Mailgun Sandbox &lt;postmaster@&lt;SANDBOX_URL&gt;&gt;&quot;,rn                &quot;to&quot;: f&quot;{username} &lt;{email_address}&gt;&quot;,rn                &quot;subject&quot;: f&quot;Hello {username}&quot;,rn                &quot;template&quot;: &quot;&lt;EMAIL_TEMPLATE_NAME&gt;&quot;,rn                &quot;h:X-Mailgun-Variables&quot;: json.dumps(rn                    {&quot;reset_link&quot;: reset_link, &quot;username&quot;: username}rn                ),rn            },rn        )rnrn        if response.status_code == 200:rn            print(f&quot;Password reset email sent successfully to {email_address}&quot;)rn            return {&quot;success&quot;: True, &quot;message&quot;: &quot;Email sent successfully&quot;}rn        else:rn            print(rn                f&quot;Failed to send email. Status Code: {response.status_code}, Response: {response.text}&quot;rn            )rn            return {&quot;success&quot;: False, &quot;error&quot;: response.text}rnrn    except requests.exceptions.RequestException as e:rn        print(f&quot;Request failed: {str(e)}&quot;)rn        return {&quot;success&quot;: False, &quot;error&quot;: str(e)}rnrnasync def generate_password_reset_link(rn    email_address, base_url=&quot;https:\/\/mailgunny.com\/reset-password&quot;rn):rn    token = uuid.uuid4()rn    encoded_email = urllib.parse.quote(email_address)rn    return f&quot;{base_url}?email={encoded_email}&amp;token={token}&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\">In diesem Code verarbeitet die Funktion <code>reset_password<\/code> (<code>@app.post(\"\/resetPassword\/\")<\/code>) Anfragen zum Zur\u00fccksetzen von Passw\u00f6rtern, indem sie \u00fcberpr\u00fcft, ob die \u00fcbermittelte E-Mail in der Datenbank <code>users.json<\/code> vorhanden ist. Wenn sie gefunden wird, generiert sie mithilfe von <code>generate_password_reset_link(email_address) <\/code> einen eindeutigen Link zum Zur\u00fccksetzen und sendet die E-Mail zum Zur\u00fccksetzen \u00fcber <code>send_password_reset_email(username, email_address, reset_link)<\/code>. Anschlie\u00dfend gibt die Funktion eine Erfolgsmeldung zur\u00fcck, wenn die E-Mail gesendet wurde, oder andernfalls eine Fehlermeldung aus. Falls keine passende E-Mail gefunden wird, wird eine entsprechende Fehlerantwort ausgegeben.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Hinweis:<\/b> Ersetzen Sie die Variable <code>API_KEY<\/code> durch den Schl\u00fcssel f\u00fcr Ihr Mailgun-Konto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um die Implementierung zu testen, f\u00fchren Sie <code>uvicorn main:app<\/code> &#8211;reload aus und \u00f6ffnen Sie <a href=\"http:\/\/localhost:8000\/login\" target=\"_tabs\" rel=\"noopener noreferrer\">http:\/\/localhost:8000\/login<\/a>. Klicken Sie auf den <b>Passwort vergessen?<\/b> -Link:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4013\" width=\"1538\" height=\"628\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/14.png\" alt=\"Forgot Password Link Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/14.png 1538w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/14-300x122.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/14-768x314.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/14-1024x418.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/14-1536x627.png 1536w\" sizes=\"(max-width: 1538px) 100vw, 1538px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Geben Sie eine in Ihrer Datei <code>users.json<\/code> vorhandene E-Mail-Adresse ein und klicken Sie auf <b>Passwort zur\u00fccksetzen<\/b>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4017\" width=\"1538\" height=\"628\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/15.png\" alt=\"Forgot Password Reset Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/15.png 1538w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/15-300x122.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/15-768x314.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/15-1024x418.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/15-1536x627.png 1536w\" sizes=\"(max-width: 1538px) 100vw, 1538px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn dies erfolgreich war, sollten Sie zur\u00fcck zur Anmeldeseite geleitet werden, wo Sie angewiesen werden, Ihre E-Mails zu \u00fcberpr\u00fcfen. Sie sollten die folgende E-Mail im Posteingang des Empf\u00e4ngers sehen:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4022\" width=\"1544\" height=\"906\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/16.png\" alt=\"Reset Password Request Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/16.png 1544w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/16-300x176.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/16-768x451.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/16-1024x601.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/16-1536x901.png 1536w\" sizes=\"(max-width: 1544px) 100vw, 1544px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><b>Integration mit Anwendungs-Events<\/b><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die Integration mit Anwendungsereignissen mithilfe von <a href=\"https:\/\/hookdeck.com\/webhooks\/guides\/what-are-webhooks-how-they-work\" target=\"_tabs\" rel=\"noopener noreferrer\">Webhooks<\/a> erm\u00f6glicht es Ihrem System, automatisch auf Echtzeitaktualisierungen von externen Diensten zu reagieren.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Webhook ist im Wesentlichen ein HTTP- <a href=\"https:\/\/www.adjust.com\/glossary\/callback\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Callback<\/a>. Immer wenn ein bestimmtes Ereignis in einer externen Anwendung auftritt (z.\u00a0B. eine Zahlungsbest\u00e4tigung, eine Nutzerregistrierung oder eine Anfrage zum Zur\u00fccksetzen des Passworts), sendet der Dienst eine Anfrage an Ihre vordefinierte Webhook-URL. Dies erm\u00f6glicht eine nahtlose Automatisierung und reduziert den Bedarf an manuellen Eingriffen oder regelm\u00e4\u00dfigem Polling. Indem Sie Ihre Anwendung so konfigurieren, dass sie auf diese Webhook-Ereignisse reagiert, l\u00f6sen Sie relevante Aktionen aus\u00a0\u2013 etwa das Aktualisieren einer Datenbank, das Senden von Benachrichtigungen oder das Verarbeiten von Transaktionen\u00a0\u2013, sobald das Ereignis eintritt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um Webhooks in Mailgun zu integrieren, m\u00fcssen Sie einen Endpunkt erstellen. \u00d6ffnen Sie dazu die Datei main.py und f\u00fcgen Sie den folgenden Code am Ende ein:<\/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                                    @app.post(&quot;\/webhooks\/password-reset&quot;)rnasync def handle_webhook(request: Request):rn    data = await request.json()rn    print(f&quot;Password reset email clicked: {data}&quot;)rn    return {&quot;status&quot;: &quot;received&quot;, &quot;status_code&quot;: 200}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\">Kehren Sie zum Dashboard zur\u00fcck und gehen Sie zu <b>Senden &gt; Versand &gt; Webhooks<\/b>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4029\" width=\"1546\" height=\"692\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/17.png\" alt=\"Add Webhooks Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/17.png 1546w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/17-300x134.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/17-768x344.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/17-1024x458.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/17-1536x688.png 1536w\" sizes=\"(max-width: 1546px) 100vw, 1546px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Klicken Sie in der oberen rechten Ecke auf <b>Webhook hinzuf\u00fcgen<\/b>. W\u00e4hlen Sie in der Dropdown-Liste der Ereignistypen <b>Zugestellte Nachrichten<\/b> aus und geben Sie im Feld <b>URL<\/b> die Route zu Ihrer Webhook-URL ein. In diesem Fall ist es https:\/\/\/webhooks\/password-reset. Klicken Sie anschlie\u00dfend auf <b>Webhook erstellen<\/b>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4031\" width=\"1538\" height=\"682\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/18.png\" alt=\"New Webhook Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/18.png 1538w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/18-300x133.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/18-768x341.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/18-1024x454.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/18-1536x681.png 1536w\" sizes=\"(max-width: 1538px) 100vw, 1538px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Testen Sie den Webhook. Ihr Ergebnis sollte folgenderma\u00dfen aussehen:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4032\" width=\"1554\" height=\"1064\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/19.png\" alt=\"Test webhook Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/19.png 1554w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/19-300x205.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/19-768x526.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/19-1024x701.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/19-1536x1052.png 1536w\" sizes=\"(max-width: 1554px) 100vw, 1554px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Serverseitig sollten Sie die folgende Nachricht erhalten:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Password reset email clicked: {'signature': {'token': '41929b08bb287b8a0b157f7834844b6bc483b7b090692a2b15', 'timestamp': '1739785355', 'signature': '117f70dcf985c72df30c07b02898dd458d1cbbad29d0457ccee8c4497f89c5ac'}, 'event-data': {'id': 'CPgfbmQMTCKtHW6uIWtuVe', 'timestamp': 1521472262.908181, 'log-level': 'info', 'event': 'delivered', 'delivery-status': {'tls': True, 'mx-host': 'smtp-in.example.com', 'code': 250, 'description': '', 'session-seconds': 0.4331989288330078, 'utf8': True, 'attempt-no': 1, 'message': 'OK', 'certificate-verified': True}, 'flags': {'is-routed': False, 'is-authenticated': True, 'is-system-test': False, 'is-test-mode': False}, 'envelope': {'transport': 'smtp', 'sender': 'bob@sandbox9199067bcb654265aae9ce9e308b6150.mailgun.org', 'sending-ip': '209.61.154.250', 'targets': 'alice@example.com'}, 'message': {'headers': {'to': 'Alice ', 'message-id': '20130503182626.18666.16540@sandbox9199067bcb654265aae9ce9e308b6150.mailgun.org', 'from': 'Bob ', 'subject': 'Test delivered webhook'}, 'attachments': [], 'size': 111}, 'recipient': 'alice@example.com', 'recipient-domain': 'example.com', 'storage': {'url': 'https:\/\/se.api.mailgun.net\/v3\/domains\/sandbox9199067bcb654265aae9ce9e308b6150.mailgun.org\/messages\/message_key', 'key': 'message_key'}, 'campaigns': [], 'tags': ['my_tag_1', 'my_tag_2'], 'user-variables': {'my_var_1': 'Mailgun Variable #1', 'my-var-2': 'awesome'}}}<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dies kann je nach gesendeter E-Mail variieren.<\/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\"><a href=\"https:\/\/drucker.institute\/about-peter-drucker\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Peter Drucker<\/a>, ein ber\u00fchmter Unternehmensberater, sagte einmal:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Was man nicht messen kann, kann man nicht verbessern.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In diesem Sinne bietet Mailgun Tools zur \u00dcberpr\u00fcfung der Performance von gesendeten E-Mails. Die Seite <b>Senden &gt; Versand &gt; Analysen<\/b> hilft beispielsweise dabei zu messen, welcher Prozentsatz der E-Mails zugestellt, ge\u00f6ffnet und angeklickt wird:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4035\" width=\"1540\" height=\"696\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/20.png\" alt=\"Analytics Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/20.png 1540w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/20-300x136.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/20-768x347.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/20-1024x463.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/20-1536x694.png 1536w\" sizes=\"(max-width: 1540px) 100vw, 1540px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Auf der Seite <b>Senden &gt; Berichte &gt; Metriken<\/b> erhalten Sie detaillierte Informationen zur Performance Ihrer E-Mails:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4038\" width=\"1550\" height=\"428\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/21.png\" alt=\"Metrics image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/21.png 1550w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/21-300x83.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/21-768x212.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/21-1024x283.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/21-1536x424.png 1536w\" sizes=\"(max-width: 1550px) 100vw, 1550px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">W\u00e4hlen Sie zudem die Metriken aus, die Sie f\u00fcr einen bestimmten Zeitraum sehen m\u00f6chten:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4040\" width=\"1554\" height=\"802\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/22.png\" alt=\"Customized Metrics Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/22.png 1554w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/22-300x155.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/22-768x396.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/22-1024x528.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/22-1536x793.png 1536w\" sizes=\"(max-width: 1554px) 100vw, 1554px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Mailgun stellt Ihnen zudem Protokolle zur Verf\u00fcgung, falls Sie sich eingehender mit Zustellereignissen befassen und auftretende Fehler untersuchen m\u00f6chten:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4041\" width=\"1554\" height=\"430\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/23.png\" alt=\"Logs Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/23.png 1554w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/23-300x83.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/23-768x213.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/23-1024x283.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/23-1536x425.png 1536w\" sizes=\"(max-width: 1554px) 100vw, 1554px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Schlie\u00dflich bietet Mailgun eine Bounce-Klassifizierung, mit der Sie sehen, wie viele Ihrer E-Mails nicht durchgehen. Darin wird auch angezeigt, wie viele dieser Bounces kritisch sind:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4043\" width=\"1550\" height=\"462\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/24.png\" alt=\"Bounce Classification Image\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/24.png 1550w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/24-300x89.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/24-768x229.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/24-1024x305.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/24-1536x458.png 1536w\" sizes=\"(max-width: 1550px) 100vw, 1550px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Zusammenfassung<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In diesem Tutorial haben Sie erfahren, wie Sie einen vollst\u00e4ndigen Transaktions-E-Mail-Workflow f\u00fcr das Zur\u00fccksetzen von Passw\u00f6rtern mit der Mailgun-API erstellen. Nachdem Sie ein Mailgun-Konto eingerichtet und einen API-Schl\u00fcssel abgerufen haben, haben Sie eine Anwendungsschnittstelle mit FastAPI erstellt. Anschlie\u00dfend haben Sie eine E-Mail-Vorlage entworfen und konfiguriert, die Funktion zum E-Mail-Versand implementiert und Webhooks f\u00fcr das Echtzeit-Ereignistracking integriert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Transaktions-E-Mail-Prozesse sind entscheidend f\u00fcr ein nahtloses und sicheres Nutzererlebnis, insbesondere beim Zur\u00fccksetzen von Passw\u00f6rtern. <u>Mailgun<\/u> hilft Ihnen bei der Automatisierung dieses Prozesses, verbessert die Sicherheit und Produktivit\u00e4t und macht gleichzeitig manuelle Eingriffe \u00fcberfl\u00fcssig. Die Implementierung dieses Ansatzes in Ihren Projekten wird nicht nur die Kundenzufriedenheit erh\u00f6hen, sondern auch zur Aufrechterhaltung eines zuverl\u00e4ssigen Authentifizierungssystems beitragen.<\/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_a12da7e5525ec1720af2de6a4c7cdeb0\">\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_a12da7e5525ec1720af2de6a4c7cdeb0\">\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>Haben Sie Probleme beim Versenden sicherer E-Mails zum Zur\u00fccksetzen von Passw\u00f6rtern? Diese praktische Anleitung zeigt Ihnen, wie Sie einen zuverl\u00e4ssigen, automatisierten E-Mail-Workflow mit der Mailgun-API und FastAPI erstellen.\u2026<\/p>\n","protected":false},"author":9,"featured_media":3952,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[19],"class_list":["post-19887","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>E-Mail-Workflow f\u00fcr Passwort-Resets mit der Mailgun-API erstellen - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Erstellen Sie Transaktions-E-Mail-Workflows f\u00fcr Passwort-Resets mit der Mailgun-API und FastAPI, um Authentifizierung und Nutzererlebnis zu optimieren.\" \/>\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-email-workflows-passwort-zuruecksetzen-erstellen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"E-Mail-Workflow f\u00fcr Passwort-Resets mit der Mailgun-API erstellen - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Erstellen Sie Transaktions-E-Mail-Workflows f\u00fcr Passwort-Resets mit der Mailgun-API und FastAPI, um Authentifizierung und Nutzererlebnis zu optimieren.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-email-workflows-passwort-zuruecksetzen-erstellen\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-14T16:22:14+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=\"12\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-email-workflows-passwort-zuruecksetzen-erstellen\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/transaktions-email-workflows-passwort-zuruecksetzen-erstellen\\\/\",\"name\":\"E-Mail-Workflow f\u00fcr Passwort-Resets 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-email-workflows-passwort-zuruecksetzen-erstellen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/transaktions-email-workflows-passwort-zuruecksetzen-erstellen\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"datePublished\":\"2026-09-14T16:22:13+00:00\",\"dateModified\":\"2026-09-14T16:22:14+00:00\",\"description\":\"Erstellen Sie Transaktions-E-Mail-Workflows f\u00fcr Passwort-Resets mit der Mailgun-API und FastAPI, um Authentifizierung und Nutzererlebnis zu optimieren.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/transaktions-email-workflows-passwort-zuruecksetzen-erstellen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/transaktions-email-workflows-passwort-zuruecksetzen-erstellen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/transaktions-email-workflows-passwort-zuruecksetzen-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-email-workflows-passwort-zuruecksetzen-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\":\"Transaktions-E-Mail-Workflows f\u00fcr das Zur\u00fccksetzen von Passw\u00f6rtern mit der Mailgun-API erstellen\"}]},{\"@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":"E-Mail-Workflow f\u00fcr Passwort-Resets mit der Mailgun-API erstellen - Transactional Email API Service For Developers | Mailgun","description":"Erstellen Sie Transaktions-E-Mail-Workflows f\u00fcr Passwort-Resets mit der Mailgun-API und FastAPI, um Authentifizierung und Nutzererlebnis zu optimieren.","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-email-workflows-passwort-zuruecksetzen-erstellen\/","og_locale":"de_DE","og_type":"article","og_title":"E-Mail-Workflow f\u00fcr Passwort-Resets mit der Mailgun-API erstellen - Transactional Email API Service For Developers | Mailgun","og_description":"Erstellen Sie Transaktions-E-Mail-Workflows f\u00fcr Passwort-Resets mit der Mailgun-API und FastAPI, um Authentifizierung und Nutzererlebnis zu optimieren.","og_url":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-email-workflows-passwort-zuruecksetzen-erstellen\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","article_modified_time":"2026-09-14T16:22:14+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":"12\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-email-workflows-passwort-zuruecksetzen-erstellen\/","url":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-email-workflows-passwort-zuruecksetzen-erstellen\/","name":"E-Mail-Workflow f\u00fcr Passwort-Resets 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-email-workflows-passwort-zuruecksetzen-erstellen\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-email-workflows-passwort-zuruecksetzen-erstellen\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","datePublished":"2026-09-14T16:22:13+00:00","dateModified":"2026-09-14T16:22:14+00:00","description":"Erstellen Sie Transaktions-E-Mail-Workflows f\u00fcr Passwort-Resets mit der Mailgun-API und FastAPI, um Authentifizierung und Nutzererlebnis zu optimieren.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-email-workflows-passwort-zuruecksetzen-erstellen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-email-workflows-passwort-zuruecksetzen-erstellen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/transaktions-email-workflows-passwort-zuruecksetzen-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-email-workflows-passwort-zuruecksetzen-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":"Transaktions-E-Mail-Workflows f\u00fcr das Zur\u00fccksetzen von Passw\u00f6rtern mit der Mailgun-API erstellen"}]},{"@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\/19887","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\/9"}],"version-history":[{"count":1,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/19887\/revisions"}],"predecessor-version":[{"id":19888,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/19887\/revisions\/19888"}],"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=19887"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog_category?post=19887"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}