{"id":24994,"date":"2026-01-15T13:06:37","date_gmt":"2026-01-15T13:06:37","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/e-mails-versenden-mit-python\/"},"modified":"2026-09-16T19:09:14","modified_gmt":"2026-09-16T19:09:14","slug":"e-mails-versenden-mit-python","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/e-mails-versenden-mit-python\/","title":{"rendered":"E-Mail-Versand mit Python3 und der Mailgun-API"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Wenn Sie Ihren programmatischen E-Mail-Versand effizienter gestalten m\u00f6chten, sind Sie hier genau richtig. Unser Entwicklungsteam verf\u00fcgt \u00fcber die n\u00f6tige Erfahrung, um Ihnen den Einstieg zu erleichtern. Lesen Sie weiter und erfahren Sie mehr \u00fcber die Integration von Python3 in die leistungsstarke E-Mail-API von Mailgun\u00a0\u2013 mit zahlreichen Einblicken, Anleitungen und Tipps zur Optimierung.<\/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-1068\"><p class=\"h5 m-0\" id=\"toc-title-1068\">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=\"#erste-schritte-was-sie-fuer-dieses-tutorial-benoetigen\">Erste Schritte: Was Sie f\u00fcr dieses Tutorial ben\u00f6tigen<\/a><a class=\"scrollme link-body-color\" href=\"#voraussetzungen\">Voraussetzungen<\/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=\"#einrichten-eines-neuen-python-projekts\">Einrichten eines neuen Python-Projekts<\/a><a class=\"scrollme link-body-color\" href=\"#einen-api-schluessel-bei-mailgun-abrufen\">Einen API-Schl\u00fcssel bei Mailgun 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=\"#importe-und-initialisierung\">Importe und Initialisierung<\/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=\"#einzelne-e-mails-versenden-mit-der-mailgun-api\">Einzelne E-Mails versenden mit der Mailgun-API<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">05<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#massen-e-mails-versenden-mit-der-mailgun-api\">Massen-E-Mails versenden mit der Mailgun-API<\/a><a class=\"scrollme link-body-color\" href=\"#wie-versende-ich-mehrere-personalisierte-e-mails\">Wie versende ich mehrere personalisierte E-Mails?\u00a0<\/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=\"#zusaetzliche-funktionen-der-e-mail-api-von-mailgun\">Zus\u00e4tzliche Funktionen der E-Mail-API von Mailgun<\/a><a class=\"scrollme link-body-color\" href=\"#versand-von-html-e-mails-mit-anhaengen\">Versand von HTML-E-Mails mit Anh\u00e4ngen<\/a><a class=\"scrollme link-body-color\" href=\"#e-mail-zustellung-und-tracking\">E-Mail-Zustellung und Tracking<\/a><a class=\"scrollme link-body-color\" href=\"#e-mail-vorlagen\">E-Mail-Vorlagen<\/a><a class=\"scrollme link-body-color\" href=\"#e-mail-tests\">E-Mail-Tests\u00a0<\/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=\"#alternative-python-bibliotheken-fuer-e-mails\">Alternative Python-Bibliotheken f\u00fcr E-Mails\u00a0<\/a><a class=\"scrollme link-body-color\" href=\"#smtplib\">smtplib\u00a0<\/a><a class=\"scrollme link-body-color\" href=\"#yagmail\">Yagmail\u00a0<\/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=\"#authentifizierung-und-sicherheit\">Authentifizierung und Sicherheit\u00a0<\/a><a class=\"scrollme link-body-color\" href=\"#fehlerbehandlung\">Fehlerbehandlung\u00a0<\/a><a class=\"scrollme link-body-color\" href=\"#e-mail-zustellbarkeit\">E-Mail-Zustellbarkeit\u00a0<\/a><a class=\"scrollme link-body-color\" href=\"#authentifizieren-sie-ihre-e-mails\">Authentifizieren Sie Ihre E-Mails\u00a0<\/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=\"#e-mail-versand-mit-python3-und-der-e-mail-api-von-mailgun-starten\">E-Mail-Versand mit Python3 und der E-Mail-API von Mailgun starten<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">10<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#faqs\">FAQs<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Erste Schritte: Was Sie f\u00fcr dieses Tutorial ben\u00f6tigen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Beim E-Mail-Versand haben Sie zwei M\u00f6glichkeiten: manuell oder programmatisch. Wenn es um <a href=\"https:\/\/www.mailgun.com\/blog\/email\/what-is-transactional-email-basics\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Transaktions-E-Mails<\/a> geht, ist der programmatische Ansatz die beste Wahl. Anstatt wichtige E-Mail-Updates oder Benachrichtigungen manuell zu versenden, k\u00f6nnen Sie mit automatisierten E-Mail-Skripten Zeit sparen und Fehler reduzieren.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Skripte\u00a0\u2013 kleine Programme zur Automatisierung von Aufgaben\u00a0\u2013 bieten eine effizientere Methode, um Massen-E-Mails zu versenden, Nachrichten zu planen oder direkt aus Ihrer Anwendung aufgerufen zu werden. Zu den typischen Anwendungsf\u00e4llen f\u00fcr den E-Mail-Versand \u00fcber automatisierte Skripte geh\u00f6ren:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Versand von Willkommens-E-Mails bei der Registrierung<\/li>\n\n\n\n<li>Versand von Benachrichtigungen und Warnungen aus Anwendungen, beispielsweise um Personen \u00fcber ihre Dienstnutzung zu informieren oder das Admin-Team bei knappen Serverressourcen zu warnen<\/li>\n\n\n\n<li>Versand von Berichten, etwa ein w\u00f6chentlicher Bericht \u00fcber neue Kundschaft<\/li>\n\n\n\n<li>Versand von Marketingkampagnen\u00a0\u2013 beispielsweise zur Bewerbung neuer Produkte oder Dienstleistungen<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In diesem Tutorial erfahren Sie, wie Sie E-Mails mit Python3-Skripten und der Mailgun-API versenden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Voraussetzungen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Um dieses Tutorial zu Python3 und der E-Mail-API nachzuvollziehen, ben\u00f6tigen Sie Folgendes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Python 3.9 oder h\u00f6her. Python wird oft als das Schweizer Taschenmesser unter den Programmiersprachen bezeichnet und bietet vielf\u00e4ltige M\u00f6glichkeiten. Neben vielen anderen Einsatzm\u00f6glichkeiten eignet sich Python hervorragend zum Schreiben verschiedenster Skripte.<\/li>\n\n\n\n<li>Ein Mailgun-Konto. Mailgun ist eine E-Mail-Versandplattform, mit der Sie E-Mails versenden und nachverfolgen k\u00f6nnen. <!-- -->Wenn Sie Mailgun noch nicht nutzen, k\u00f6nnen Sie diesem Tutorial mit <a href=\"https:\/\/signup.mailgun.com\/new\/signup\" target=\"_tabs\" rel=\"noopener noreferrer\">unserer kostenlosen Testversion<\/a>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Einrichten eines neuen Python-Projekts<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Gehen wir ins Detail.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Erstellen Sie zun\u00e4chst ein passendes Verzeichnis f\u00fcr Ihr Python-Projekt und f\u00fcgen Sie dort eine leere .env-Datei hinzu. Bevor Sie fortfahren, sollten Sie eine neue <a href=\"https:\/\/docs.python.org\/3\/library\/venv.html\" target=\"_tabs\" rel=\"noopener noreferrer\">virtuelle Umgebung<\/a> erstellen und aktivieren, bevor Sie die f\u00fcr dieses Tutorial ben\u00f6tigten Python-Bibliotheken installieren. Dadurch wird Ihr Projekt isoliert, was Konflikte bei den Abh\u00e4ngigkeiten verhindert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um die ben\u00f6tigten Bibliotheken (requests und python-dotenv) \u00fcber pip in Ihrer virtuellen Umgebung zu installieren, f\u00fchren Sie den folgenden Befehl aus:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">pip install requests python-dotenv<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mit der requests-Bibliothek k\u00f6nnen Sie API-Aufrufe t\u00e4tigen, w\u00e4hrend die python-dotenv-Bibliothek es Ihnen erm\u00f6glicht, den API-Schl\u00fcssel au\u00dferhalb Ihres Codes zu speichern.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Einen API-Schl\u00fcssel bei Mailgun abrufen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Als N\u00e4chstes rufen Sie einen API-Schl\u00fcssel aus Ihrem Mailgun-Konto ab, den Sie f\u00fcr API-Aufrufe an Mailgun verwenden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Melden Sie sich in Ihrem Mailgun-Konto an und erstellen Sie einen API-Schl\u00fcssel auf der <a href=\"https:\/\/app.mailgun.com\/settings\/api_security\" target=\"_tabs\" rel=\"noopener noreferrer\">Seite &#8222;API Security&#8220;<\/a>, die Sie \u00fcber ein Dropdown-Men\u00fc unter Ihrem Namen in der oberen rechten Ecke erreichen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4967\" width=\"1208\" height=\"732\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screenshot_2024-05-15_at_8.20.19_PM.png\" alt=\"New API key location in Mailgun\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screenshot_2024-05-15_at_8.20.19_PM.png 1208w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screenshot_2024-05-15_at_8.20.19_PM-300x182.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screenshot_2024-05-15_at_8.20.19_PM-768x465.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screenshot_2024-05-15_at_8.20.19_PM-1024x621.png 1024w\" sizes=\"(max-width: 1208px) 100vw, 1208px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Kopieren Sie diesen API-Schl\u00fcssel und f\u00fcgen Sie ihn in die .env-Datei Ihres Projekts ein.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MAILGUN_API_KEY=&#8220;Ihr API-Schl\u00fcssel hier&#8220;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Sie schon in Mailgun sind, notieren Sie sich auch Ihre Absenderdomains aus dem Mailgun-Dashboard.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Sie ein kostenloses Abonnement nutzen, sehen Sie eine Sandbox-Domain, die beim Versand von E-Mails \u00fcber die Mailgun-API sowohl f\u00fcr den API-Endpunkt als auch f\u00fcr die Absender-E-Mail-Adresse verwendet wird. Die Sandbox-Domain hat das Format .<a href=\"http:\/\/mailgun.org\/\" target=\"_tabs\" rel=\"noopener noreferrer\">mailgun.org<\/a>, wie unten dargestellt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4968\" width=\"1392\" height=\"194\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/image2-4.png\" alt=\"Sandbox domain in Mailgun\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/image2-4.png 1392w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/image2-4-300x42.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/image2-4-768x107.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/image2-4-1024x143.png 1024w\" sizes=\"(max-width: 1392px) 100vw, 1392px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Sie m\u00fcssen ein Upgrade auf ein kostenpflichtiges Abonnement vornehmen, wenn Sie eine benutzerdefinierte E-Mail-Domain f\u00fcr den Versand von E-Mails \u00fcber Mailgun verwenden m\u00f6chten. Das kostenlose Abonnement erlaubt nur die Sandbox-Domain, und Sie k\u00f6nnen E-Mails an maximal f\u00fcnf verifizierte Adressen versenden. Dieses kostenlose Abonnement ist jedoch w\u00e4hrend der Entwicklungsphase n\u00fctzlich, wenn Sie die Mailgun-API in Ihr System integrieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Importe und Initialisierung<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Erstellen Sie als N\u00e4chstes die Datei main.py in Ihrem Projektverzeichnis und kopieren Sie diesen Code hinein:<\/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                                Python                            <\/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-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    ```python import jsonrnimport requestsrnimport loggingrnrnimport osrnfrom dotenv import load_dotenvrnrnlogging.basicConfig(level=logging.INFO) # set log levelrnload_dotenv() # for reading API key from `.env` file.rnrn# Sandbox API URL format: https:\/\/api.mailgun.net\/v3\/sandbox&lt;ID&gt;.mailgun.org\/messagesrnMAILGUN_API_URL = &quot;https:\/\/api.mailgun.net\/v3\/YOUR_DOMAIN_NAME\/messages&quot;rnFROM_EMAIL_ADDRESS = &quot;Sender Name &lt;SENDER_EMAIL_ID&gt;&quot;\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Dieser verwendet das Standard-Logging von Python und konfiguriert es mit diesem Code auf das INFO-Level:<\/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                                Python                            <\/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-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    ```pythonrnlogging.basicConfig(level=logging.INFO)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\">Die Funktion load_dotenv() stammt aus der Bibliothek python-dotenv und dient dazu, Umgebungsvariablen aus der .env-Datei in Ihren Python-Code zu laden. Es geh\u00f6rt zu den Best Practices, vertrauliche Informationen wie Zugangsdaten und API-Schl\u00fcssel in der .env-Datei zu speichern und von dort auszulesen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MAILGUN_API_URL legt die API-URL f\u00fcr Ihr Python-Skript fest und gibt die E-Mail-ID des Absenders an. Beide m\u00fcssen Ihre E-Mail-Absenderdomain oder die zuvor erw\u00e4hnte Sandbox-Domain verwenden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Einzelne E-Mails versenden mit der Mailgun-API<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Betrachten wir zun\u00e4chst die einfachste Art, die Mailgun-API zu nutzen: den Versand einer einzelnen E-Mail. Dies bietet sich f\u00fcr einmalige F\u00e4lle an, beispielsweise f\u00fcr eine Erinnerung oder eine Follow-up-E-Mail an wichtige Kontakte. So k\u00f6nnen Sie zudem die E-Mail-Zustellung nachverfolgen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcgen Sie den folgenden Code nach den Importen und der Initialisierung in Ihre Datei main.py 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                                Python                            <\/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-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    ```pythonrndef send_single_email(to_address: str, subject: str, message: str):rn\u00a0\u00a0\u00a0\u00a0try:rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0api_key = os.getenv(&quot;MAILGUN_API_KEY&quot;)\u00a0 # get API-Key from the `.env` filernrn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0resp = requests.post(MAILGUN_API_URL, auth=(&quot;api&quot;, api_key),rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0data={&quot;from&quot;: FROM_EMAIL_ADDRESS,rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&quot;to&quot;: to_address, &quot;subject&quot;: subject, &quot;text&quot;: message})rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if resp.status_code == 200:\u00a0 # successrn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0logging.info(f&quot;Successfully sent an email to &#039;{to_address}&#039; via Mailgun API.&quot;)rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else:\u00a0 # errorrn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0logging.error(f&quot;Could not send the email, reason: {resp.text}&quot;)rnrn\u00a0\u00a0\u00a0\u00a0except Exception as ex:rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0logging.exception(f&quot;Mailgun error: {ex}&quot;)rnrnif __name__ == &quot;__main__&quot;:rn\u00a0\u00a0\u00a0\u00a0send_single_email(&quot;Manish &lt;manish@exanple.com&gt;&quot;, &quot;Single email test&quot;, &quot;Testing Mailgun API for a single email&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\">Diese Funktion <b>send_single_email(&#8230;) <\/b> akzeptiert drei Argumente: <b>to_address<\/b>, <b>subject<\/b> und <b> message<\/b>. <b>to_address<\/b> steht f\u00fcr eine einzelne E-Mail-Adresse, und die beiden anderen stehen f\u00fcr den Betreff und den Inhalt der E-Mail.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Code liest den Mailgun-API-Schl\u00fcssel aus der .env-Datei aus und nutzt ihn f\u00fcr einen API-Aufruf, wobei eine sichere Verbindung zur angegebenen API_URL hergestellt wird. Dieser API-Schl\u00fcssel fungiert als eindeutige Kennung, mit der Mailgun den API-Aufruf authentifizieren und verifizieren kann, wer die Dienste nutzt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sie m\u00fcssen Ihren eindeutigen API-Schl\u00fcssel verwenden, um eine korrekte Authentifizierung zu gew\u00e4hrleisten. Die in diesem API-Aufruf verwendete Absender-E-Mail-Adresse muss ebenfalls mit Ihrer g\u00fcltigen Domain oder der Sandbox-Domain von Mailgun verkn\u00fcpft sein. Ist dies nicht der Fall, schl\u00e4gt der Aufruf mit einer Fehlermeldung fehl.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Datenparameter werden \u00fcber die HTTP-POST-Methode mit dem Aufruf requests.post(&#8230;) an den API-Endpunkt gesendet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ist der API-Aufruf erfolgreich, wird Ihre E-Mail zur Zustellung in die Warteschlange eingereiht und die API gibt den Status HTTP-200 (OK) zur\u00fcck. Im Fehlerfall gibt die API eine Fehlermeldung mit einem entsprechenden HTTP-Statuscode zur\u00fcck. Beide F\u00e4lle werden von diesem Code-Snippet entsprechend protokolliert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">if __name__ == &#8222;__main__&#8220; zeigt, wie diese Funktion in Ihrem Skript aufgerufen werden kann.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Sie dieses Skript in Ihrem Terminal ausf\u00fchren, wird Folgendes angezeigt:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4969\" width=\"800\" height=\"160\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/undefined_-_Imgur.gif\" alt=\"Python script running in terminal\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Massen-E-Mails versenden mit der Mailgun-API<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Zwar k\u00f6nnen Sie die Funktion send_single_email(&#8230;) in einer Schleife verwenden, um E-Mails an mehrere Empfangsadressen zu versenden, doch aufgrund von Netzwerk-I\/O-Verz\u00f6gerungen ist dies nicht die effizienteste Methode. Dieser Ansatz kann zudem zu einer <a href=\"text=In%2520email%2520terms%252C%2520rate%2520limiting,send%2520during%2520that%2520time%2520frame.\" target=\"_tabs\" rel=\"noopener noreferrer\">API-Ratenbegrenzung f\u00fchren.<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Verwenden Sie stattdessen den <a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/user-manual\/sending-messages\/#batch-sending\" target=\"_tabs\" rel=\"noopener noreferrer\">Batch-Versand<\/a> f\u00fcr den Versand von E-Mails an mehrere Empfangsadressen. Das folgende Code-Snippet veranschaulicht den Einsatz in Ihrem Python-Skript.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcgen Sie die Funktion send_batch_emails(&#8230;) nach der Funktion send_single_email(&#8230;) in Ihre Datei main.py ein und passen Sie den Teil __main__ wie unten gezeigt an:<\/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                                Python                            <\/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-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    ```pythonrndef send_batch_emails(recipients: dict, subject: str, message: str):rn\u00a0\u00a0\u00a0\u00a0try:rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0api_key = os.getenv(&quot;MAILGUN_API_KEY&quot;)\u00a0 # get API-Key from the `.env` filernrn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0to_address = list(recipients.keys())\u00a0 # get only email addressesrn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0recipients_json = json.dumps(recipients)\u00a0 \u00a0 # for API callrnrn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0logging.info(f&quot;Sending email to {len(to_address)} IDs...&quot;)rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0resp = requests.post(MAILGUN_API_URL, auth=(&quot;api&quot;, api_key),rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0data={&quot;from&quot;: FROM_EMAIL_ADDRESS,rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&quot;to&quot;: to_address, &quot;subject&quot;: subject, &quot;text&quot;: message,rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&quot;recipient-variables&quot;: recipients_json})rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if resp.status_code == 200:\u00a0 # successrn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0logging.info(f&quot;Successfully sent email to {len(recipients)} recipients via Mailgun API.&quot;)rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else: \u00a0 # errorrn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0logging.error(f&quot;Could not send emails, reason: {resp.text}&quot;)rn\u00a0\u00a0\u00a0\u00a0except Exception as ex:rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0logging.exception(f&quot;Mailgun error: {ex}&quot;)rnrnif __name__ == &quot;__main__&quot;:rn\u00a0\u00a0\u00a0\u00a0# send_single_email(&quot;Manish &lt;manish@exanple.com&gt;&quot;, &quot;Single email test&quot;, &quot;Testing Mailgun API for a single email&quot;)rn\u00a0\u00a0\u00a0\u00a0_recipients = {&quot;manish@example.com&quot;: {&quot;name&quot;: &quot;Manish&quot;, &quot;id&quot;: 1},rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&quot;jakkie@example.com&quot;: {&quot;name&quot;: &quot;Jakkie&quot;, &quot;id&quot;: 2},rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&quot;elzet@example.com&quot;: {&quot;name&quot;: &quot;Elzet&quot;, &quot;id&quot;: 3}}rnrn\u00a0\u00a0\u00a0\u00a0send_batch_emails(_recipients, &quot;Hi, %recipient.name%!&quot;, &quot;Testing Mailgun API. This email is sent via Mailgun API.&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<h3 class=\"wp-block-heading\">Wie versende ich mehrere personalisierte E-Mails?\u00a0<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Beim Batch-Versand kommt ein spezieller Parameter namens Empf\u00e4ngervariablen (Recipient Variables) zum Einsatz, mit dem Sie \u00fcber einen einzigen API-Aufruf personalisierte E-Mails an mehrere Adressen versenden k\u00f6nnen. Die Verwendung von Empf\u00e4ngervariablen beim Batch-Versand stellt sicher, dass Mailgun individuelle E-Mails an alle Adressen im An-Feld sendet. Ohne diese Variablen w\u00fcrden alle Kontakte die E-Mail-Adressen aller anderen im An-Feld sehen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier ist eine solche Empf\u00e4ngervariable, bei der E-Mail-Adressen als Schl\u00fcssel (Keys) und die entsprechenden Attribute &#8222;name&#8220; und &#8222;id&#8220; als Werte (Values) dienen:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">{&#8222;manish@example.com&#8220;: {&#8222;name&#8220;: &#8222;Manish&#8220;, &#8222;id&#8220;: 1},<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8222;jakkie@example.com&#8220;: {&#8222;name&#8220;: &#8222;Jakkie&#8220;, &#8222;id&#8220;: 2},<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8222;elzet@example.com&#8220;: {&#8222;name&#8220;: &#8222;Elzet&#8220;, &#8222;id&#8220;: 3}}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Funktion send_batch_emails(&#8230;) hat drei Parameter: recipients, subject und message. Beachten Sie, dass recipients ein Dictionary-Objekt ist, welches die oben besprochene Empf\u00e4ngervariable repr\u00e4sentiert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Code extrahiert zun\u00e4chst die E-Mail-Adressen aus diesem Dictionary mittels to_address = list(recipients.keys()) und konvertiert das Dictionary dann mit dem Aufruf recipients_json = json.dumps(recipients) in JSON f\u00fcr die API-Nutzung.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Variable recipients_json wird im API-Aufruf f\u00fcr das Feld recipient-variables \u00fcbergeben, das zur Personalisierung von Betreff und Inhalt der E-Mail dient. Der Betreff wird wie folgt angegeben:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8222;Hallo %recipient.name%!&#8220;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Mailgun-API ersetzt %recipient.name% beim Versand der E-Mails korrekt durch den Namen der jeweiligen Person aus dem JSON. Im obigen Beispiel erhalten Manish, Jakkie und Elzet also personalisierte Betreffzeilen\u00a0\u2013 &#8222;Hallo Manish!&#8220; &#8222;Hallo Jakkie!&#8220; und &#8222;Hallo Elzet!&#8220;. Auf \u00e4hnliche Weise k\u00f6nnen Sie den Inhalt der E-Mail mit einem beliebigen %recipient.KEY-NAME%-Wert personalisieren.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der restliche Code von send_batch_emails(&#8230;) \u00e4hnelt der Funktion send_single_email(&#8230;), mit dem Unterschied, dass E-Mails in einem einzigen API-Aufruf an mehrere Empfangsadressen gesendet werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Sie dieses Skript ausf\u00fchren, wird Folgendes angezeigt:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4970\" width=\"800\" height=\"160\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/undefined_-_Imgur__1_.gif\" alt=\"Python script running in terminal\" \/><\/figure>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-light\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> Beachten Sie: Die maximale Anzahl an Adressen, die in einem einzigen Mailgun-API-Aufruf f\u00fcr den Batch-Versand zul\u00e4ssig ist, betr\u00e4gt 1.000. Weitere Informationen zur <a href='https:\/\/documentation.mailgun.com\/docs\/mailgun\/user-manual\/sending-messages\/#batch-sending'>API f\u00fcr den Batch-Versand finden Sie hier<\/a>.<\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Hier ist ein Beispiel daf\u00fcr, wie diese E-Mail im Posteingang der empfangenden Person aussehen wird:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4971\" width=\"1428\" height=\"344\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/image5-2.png\" alt=\"Email sent using Mailgun API\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/image5-2.png 1428w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/image5-2-300x72.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/image5-2-768x185.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/image5-2-1024x247.png 1024w\" sizes=\"(max-width: 1428px) 100vw, 1428px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Zus\u00e4tzliche Funktionen der E-Mail-API von Mailgun<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die Mailgun-API bietet einige zus\u00e4tzliche Funktionen, die Ihnen die Arbeit erleichtern.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Versand von HTML-E-Mails mit Anh\u00e4ngen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mit der Mailgun-API k\u00f6nnen Sie <a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/user-manual\/sending-messages\/#send-with-attachments\" target=\"_tabs\" rel=\"noopener noreferrer\">E-Mails mit Anh\u00e4ngen versenden<\/a>, unabh\u00e4ngig davon, ob diese Text- oder HTML-Inhalte enthalten. Sie k\u00f6nnen denselben API-Endpunkt (https:\/\/api.mailgun.net\/v3\/YOUR_DOMAIN_NAME\/messages) verwenden, wobei ein zus\u00e4tzlicher &#8218;attachment&#8216; an den Parameter files \u00fcbergeben wird, wie unten gezeigt:<\/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                                Python                            <\/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-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    ```pythonrnfiles = {&#039;attachment&#039;: open(&#039;weekly-report.csv&#039;, &#039;rb&#039;)} \u00a0 \u00a0 # file you want to attachrnresp = requests.post(MAILGUN_API_URL, auth=(&quot;api&quot;, api_key), files=files,rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0data={&quot;from&quot;: FROM_EMAIL_ADDRESS,rn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&quot;to&quot;: to_address, &quot;subject&quot;: subject, &quot;text&quot;: message})rn```\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<h3 class=\"wp-block-heading\">E-Mail-Zustellung und Tracking<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mailgun bietet ein <a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/user-manual\/tracking-messages\/\" target=\"_tabs\" rel=\"noopener noreferrer\">detailliertes E-Mail-Tracking<\/a>, das unter anderem erfasst, wann E-Mails zugestellt oder ge\u00f6ffnet werden, Links angeklickt werden, Bounces auftreten, Abmeldungen erfolgen oder E-Mails als Spam markiert werden. Diese Daten stehen \u00fcber das Control Panel im Dashboard sowie \u00fcber die API zur Verf\u00fcgung.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dar\u00fcber hinaus speichert Mailgun E-Mails dauerhaft, wenn diese nicht zugestellt werden k\u00f6nnen (Hard Bounce), eine Abmeldung erfolgt oder die E-Mail als Spam markiert wird. In diesen F\u00e4llen versucht Mailgun nicht, erneut E-Mails an die betreffenden Kontakte zu senden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">E-Mail-Vorlagen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die Mailgun-API erm\u00f6glicht es Ihnen, <a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/user-manual\/sending-messages\/#templates\" target=\"_tabs\" rel=\"noopener noreferrer\">HTML-Vorlagen zu erstellen<\/a> , um Ihr E-Mail-Layout zu standardisieren und die Nachrichten durch vorgefertigte Layouts und Standardinhalte ansprechender zu gestalten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vorlagen finden Sie in der linken Seitenleiste unter dem Men\u00fcpunkt &#8222;Sending&#8220;.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">E-Mail-Tests\u00a0<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mailgun\u00a0bietet zudem Tools f\u00fcr E-Mail-Tests, um sicherzustellen, dass Ihre Nachrichten wie gew\u00fcnscht aussehen und funktionieren. Mit<a href=\"https:\/\/www.mailgun.com\/de\/produkte\/inspect\/?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noreferrer noopener\">\u00a0Untersuchen<\/a>, k\u00f6nnen Sie automatisch auf Probleme wie fehlerhafte Links, fehlende Bilder oder Spam-Trigger pr\u00fcfen. In der<a href=\"https:\/\/www.mailgun.com\/de\/funktionen\/e-mail-vorschau\/?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noreferrer noopener\">\u00a0E-Mail-Vorschau<\/a>\u00a0zeigt Ihnen, wie Ihre E-Mail auf verschiedenen Clients und Ger\u00e4ten dargestellt wird, w\u00e4hrend<a href=\"https:\/\/www.mailgun.com\/de\/funktionen\/email-barrierefreiheit\/?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noreferrer noopener\">\u00a0E-Mail-Barrierefreiheit<\/a>\u00a0Tests best\u00e4tigen, dass Ihre Inhalte den Standards f\u00fcr Barrierefreiheit entsprechen. Erfahren Sie mehr \u00fcber die <a href=\"https:\/\/www.mailgun.com\/de\/loesungen\/e-mail-test-software\/?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noreferrer noopener\">E-Mail-Testing-Software<\/a>\u00a0von Mailgun und integrieren Sie diese Pr\u00fcfungen in Ihren Workflow, wenn Sie E-Mails \u00fcber die API erstellen.\u00a0<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Alternative Python-Bibliotheken f\u00fcr E-Mails\u00a0<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bevor Sie eine spezielle E-Mail-API nutzen,\u00a0lohnt sich ein Blick auf die nativen Tools von Python f\u00fcr den E-Mail-Versand sowie auf einige leichtgewichtige Drittanbieter-Optionen.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Python umfasst zwei Kernmodule f\u00fcr SMTP-basierte E-Mails:\u00a0smtplib\u00a0und email.\u00a0\u00a0<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">smtplib\u00a0<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Das Modul\u00a0smtplib\u00a0verwaltet SMTP-Sitzungen und erm\u00f6glicht die Verbindung zu einem SMTP-Server \u00fcber SMTP_SSL() f\u00fcr implizites TLS (in der Regel Port 465) oder\u00a0SMTP() mit\u00a0starttls() f\u00fcr opportunistisches TLS (meist Port 587). Die Authentifizierung erfolgt \u00fcber einen Standard-Benutzernamen und ein Passwort.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das Paket email\u00a0ist f\u00fcr die Konstruktion der Nachricht zust\u00e4ndig.\u00a0EmailMessage\u00a0bietet eine moderne, hochrangige API, w\u00e4hrend\u00a0MIMEText\u00a0und\u00a0MIMEMultipart\u00a0Klartext, HTML und mehrteilige Nutzdaten (Multipart-Payloads) unterst\u00fctzen.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dieser Code erstellt eine einfache E-Mail und versendet sie sicher \u00fcber einen SMTP-Server mit Python:<\/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                                Python                            <\/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-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    from\u00a0email.message\u00a0import EmailMessage\u00a0\r\nimport smtplib\u00a0\r\n\u00a0\r\nmsg =\u00a0EmailMessage()\u00a0\r\nmsg[&quot;From&quot;] = &quot;you@example.com&quot;\u00a0\r\nmsg[&quot;To&quot;] = &quot;friend@example.com&quot;\u00a0\r\nmsg[&quot;Subject&quot;] = &quot;Hello&quot;\u00a0\r\nmsg.set_content(&quot;Sent with Python!&quot;)\u00a0\r\n\u00a0\r\nwith\u00a0smtplib.SMTP(&quot;smtp.example.com&quot;, 587) as smtp:\u00a0\r\n\u00a0\u00a0\u00a0\u00a0smtp.starttls()\u00a0\r\n\u00a0\u00a0\u00a0\u00a0smtp.login(&quot;username&quot;, &quot;password&quot;)\u00a0\r\n\u00a0\u00a0\u00a0\u00a0smtp.send_message(msg)\u00a0\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<h3 class=\"wp-block-heading\">Yagmail\u00a0<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Verschiedene Drittanbieter-Bibliotheken reduzieren den Boilerplate-Code zus\u00e4tzlich.\u00a0Yagmail\u00a0bietet eine auf Gmail fokussierte Abstraktion f\u00fcr den Versand von Nachrichten und Anh\u00e4ngen mit minimalem Konfigurationsaufwand.\u00a0python-emails\u00a0erg\u00e4nzt\u00a0h\u00f6herwertige Funktionen wie das Rendering von Vorlagen, die strukturierte Erstellung von Nachrichten und das DKIM-Signieren.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Generell sollten Sie darauf verzichten, Zugangsdaten fest zu programmieren (Hardcoding).\u00a0Verwenden Sie\u00a0getpass() von Python f\u00fcr die sichere Eingabe von Passw\u00f6rtern, speichern Sie API-Schl\u00fcssel in Umgebungsvariablen und \u00fcbertragen Sie\u00a0E-Mails stets\u00a0\u00fcber TLS-verschl\u00fcsselte Verbindungen.\u00a0<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Authentifizierung und Sicherheit\u00a0<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Es ist\u00a0wichtig,\u00a0einige\u00a0Best Practices\u00a0und Tipps\u00a0zu beachten, wenn Sie E-Mails programmatisch versenden.\u00a0<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fehlerbehandlung\u00a0<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Ihr Skript eine Drittanbieter-API wie\u00a0Mailgun\u00a0f\u00fcr den E-Mail-Versand nutzt, m\u00fcssen Sie m\u00f6gliche Fehler im Zusammenhang mit Netzwerk- oder API-Ausf\u00e4llen sowie API-Antworten auf Fehler abfangen. So stellen Sie sicher, dass Ihr Skript reibungslos funktioniert, Probleme wie ung\u00fcltige API-Schl\u00fcssel oder URLs erkennt und wei\u00df, wann E-Mails nicht durch die\u00a0Mailgun-API versendet wurden. Ohne Fehlerbehandlung k\u00f6nnte Ihr Skript unbemerkt fehlschlagen, was zu nicht zugestellten E-Mails f\u00fchrt.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die obigen Code-Snippets\u00a0ber\u00fccksichtigen allesamt\u00a0die Behandlung m\u00f6glicher Fehler. Zun\u00e4chst pr\u00fcfen sie den Statuscode der Antwort (resp.status_code). Ist der Aufruf\u00a0nicht erfolgreich (HTTP 200), protokollieren sie\u00a0die Fehlermeldung, damit Sie das Problem beheben k\u00f6nnen.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sowohl die Funktion\u00a0send_single_email(\u2026) als auch\u00a0send_batch_emails(\u2026) nutzen einen try-except-Block, um sicherzustellen, dass Ausnahmen korrekt abgefangen und protokolliert werden.\u00a0<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">E-Mail-Zustellbarkeit\u00a0<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">E-Mail-Zustellbarkeit bedeutet, sicherzustellen, dass Ihre E-Mails im Posteingang des Empf\u00e4ngers landen und nicht im Spam-Ordner. F\u00fcr eine hohe Zustellbarkeit ben\u00f6tigen Sie eine gute Absenderreputation. Beim Aufbau eines programmatischen Versands\u00a0gibt es einige spezifische Aspekte,\u00a0die wir ber\u00fccksichtigen k\u00f6nnen, um die E-Mail-Zustellbarkeit zu verbessern, darunter die\u00a0Authentifizierung\u00a0und die\u00a0Optimierung\u00a0von E-Mails f\u00fcr responsive Designs.\u00a0\u00a0<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Authentifizieren Sie Ihre E-Mails\u00a0<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Verwenden Sie SPF, DKIM und DMARC, um Ihre Identit\u00e4t als Absender zu best\u00e4tigen. Senden Sie E-Mails nur an verifizierte Abonnenten, die dem Empfang zugestimmt haben, und entfernen Sie regelm\u00e4\u00dfig inaktive Kontakte sowie Personen, die Ihre E-Mails als Spam markieren.\u00a0<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-light\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> <p class=\"mb-0\">DMARC wird zunehmend zu einer Branchenanforderung. Erfahren Sie in unserem Beitrag \u00fcber die <a href=\"https:\/\/www.mailgun.com\/blog\/deliverability\/dmarc-insights-from-dmarcian\/\">DMARC-Perspektive<\/a> mehr \u00fcber die Hintergr\u00fcnde und die Funktionsweise dieses Authentifizierungsstandards.<\/p><\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">E-Mail-Versand mit Python3 und der E-Mail-API von Mailgun starten<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In diesem Artikel haben Sie erfahren, wie Sie E-Mails mit einem Python-Skript und der Mailgun-API versenden. Au\u00dferdem haben Sie Mailgun-Funktionen wie E-Mail-Tracking und Vorlagen kennengelernt sowie die Bedeutung von Fehlerbehandlung, der Optimierung der Zustellbarkeit und dem Versand responsiver E-Mails verstanden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">E-Mail-Geeks helfen anderen E-Mail-Geeks. Den in diesem Tutorial behandelten Code finden Sie im <a href=\"https:\/\/github.com\/manishh\/gifts-giveaways\/tree\/master\/python\/mailgun-api-demo\" target=\"_tabs\" rel=\"noopener noreferrer\">diesem GitHub-Repo<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">War das hilfreich? Wenn ja, sollten Sie unbedingt unseren Newsletter abonnieren, um weitere Tutorials, Ank\u00fcndigungen und Branchen-Insights zu erhalten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FAQs<\/h2>\n\n\n    <div data-content-type=\"longform\" id=\"accordion-id-block_77272f10c7c1e35241089b5145feba13\" class=\"accordion accordion-longform d-flex flex-column gap-3 my-3\">\r\n\r\n        \n\r\n\r\n<div class=\"accordion-item py-2 border-bottom\">\r\n    <div\r\n        id=\"title-block_846e15ddeff32969564e623bfcd94ea2_8689\"\r\n        class=\"accordion-header pb-3\">\r\n\r\n        <button\r\n            class=\"accordion-button fs-5 collapsed\"\r\n            type=\"button\"\r\n            data-bs-toggle=\"collapse\"\r\n            data-bs-target=\"#accordion-collapse-block_846e15ddeff32969564e623bfcd94ea2_8689\"\r\n            aria-expanded=\"false\"\r\n            aria-controls=\"accordion-collapse-block_846e15ddeff32969564e623bfcd94ea2_8689\">\r\n            Wie versende ich E-Mails mit dem Python-Modul smtplib \u00fcber TLS und SSL?         <\/button>\r\n    <\/div>\r\n    <div\r\n        id=\"accordion-collapse-block_846e15ddeff32969564e623bfcd94ea2_8689\"\r\n        class=\"accordion-collapse collapse\"\r\n        aria-labelledby=\"title-block_846e15ddeff32969564e623bfcd94ea2_8689\">\r\n        <div class=\"accordion-body pb-3\">\r\n            \n\n<p class=\"wp-block-paragraph\">Verwenden Sie TLS (STARTTLS) auf Port 587, wenn Sie ein Upgrade einer unverschl\u00fcsselten Verbindung auf eine verschl\u00fcsselte vornehmen m\u00f6chten, und SSL (implizites TLS) auf Port 465, wenn die Verbindung von Beginn an verschl\u00fcsselt ist.\u00a0<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>TLS (STARTTLS):\u00a0<\/strong>smtplib.SMTP(host, 587) \u2192\u00a0starttls() \u2192\u00a0login() \u2192\u00a0send_message()\u00a0<\/li>\n\n\n\n<li><strong>SSL (implizites TLS):\u00a0<\/strong>smtplib.SMTP_SSL(host, 465) \u2192\u00a0login() \u2192\u00a0send_message()\u00a0<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In beiden F\u00e4llen konstruieren Sie die Nachricht (beispielsweise mit\u00a0EmailMessage) und versenden sie mit\u00a0smtp.send_message(msg). Authentifizieren Sie sich stets mit den SMTP-Zugangsdaten (Benutzername\/Passwort), die Sie von Ihrem Anbieter erhalten.\u00a0<\/p>\n\n\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\n\n\r\n\r\n<div class=\"accordion-item py-2 border-bottom\">\r\n    <div\r\n        id=\"title-block_cab7d94f69c74751bbbcd90566a249c4_8809\"\r\n        class=\"accordion-header pb-3\">\r\n\r\n        <button\r\n            class=\"accordion-button fs-5 collapsed\"\r\n            type=\"button\"\r\n            data-bs-toggle=\"collapse\"\r\n            data-bs-target=\"#accordion-collapse-block_cab7d94f69c74751bbbcd90566a249c4_8809\"\r\n            aria-expanded=\"false\"\r\n            aria-controls=\"accordion-collapse-block_cab7d94f69c74751bbbcd90566a249c4_8809\">\r\n            Worin unterscheiden sich EmailMessage, MIMEText und MIMEMultipart bei der Erstellung von Nachrichten?        <\/button>\r\n    <\/div>\r\n    <div\r\n        id=\"accordion-collapse-block_cab7d94f69c74751bbbcd90566a249c4_8809\"\r\n        class=\"accordion-collapse collapse\"\r\n        aria-labelledby=\"title-block_cab7d94f69c74751bbbcd90566a249c4_8809\">\r\n        <div class=\"accordion-body pb-3\">\r\n            \n\n<ul class=\"wp-block-list\">\n<li><strong>EmailMessage:<\/strong> moderne, hochrangige API. Die beste Standardwahl f\u00fcr die meisten Anwendungsf\u00e4lle. Erleichtert das Setzen von Kopfzeilen, das Hinzuf\u00fcgen von Klartext und HTML-Alternativen (add_alternative()) sowie das Anh\u00e4ngen von Dateien mit weniger Boilerplate-Code.\u00a0<\/li>\n\n\n\n<li><strong>MIMEText:<\/strong> niedrigschwelligerer Baustein f\u00fcr einen einzelnen Textteil (Klartext oder HTML). N\u00fctzlich, wenn Sie die explizite Kontrolle \u00fcber einen einzelnen Bestandteil des Textk\u00f6rpers ben\u00f6tigen.\u00a0<\/li>\n\n\n\n<li><strong>MIMEMultipart: <\/strong>Container zur Kombination mehrerer MIME-Teile (Text + HTML + Anh\u00e4nge). H\u00e4ufig in \u00e4lteren\u00a0Beispielen zu finden;\u00a0hier h\u00e4ngen Sie\u00a0MIMEText-Teile und Dateien manuell an.\u00a0<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn\u00a0Sie\u00a0ein neues Projekt beginnen, sollten Sie\u00a0EmailMessage\u00a0bevorzugen, es sei denn, Sie ben\u00f6tigen Kompatibilit\u00e4t mit \u00e4lteren MIME-Erstellungsmustern.\u00a0<\/p>\n\n\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\n\n\r\n\r\n<div class=\"accordion-item py-2 border-bottom\">\r\n    <div\r\n        id=\"title-block_5b2eb7789fbeb24a99214a80eaa86d26_4356\"\r\n        class=\"accordion-header pb-3\">\r\n\r\n        <button\r\n            class=\"accordion-button fs-5 collapsed\"\r\n            type=\"button\"\r\n            data-bs-toggle=\"collapse\"\r\n            data-bs-target=\"#accordion-collapse-block_5b2eb7789fbeb24a99214a80eaa86d26_4356\"\r\n            aria-expanded=\"false\"\r\n            aria-controls=\"accordion-collapse-block_5b2eb7789fbeb24a99214a80eaa86d26_4356\">\r\n            Wie nutze ich Umgebungsvariablen und das Modul getpass() f\u00fcr eine sichere Verwaltung von Zugangsdaten?         <\/button>\r\n    <\/div>\r\n    <div\r\n        id=\"accordion-collapse-block_5b2eb7789fbeb24a99214a80eaa86d26_4356\"\r\n        class=\"accordion-collapse collapse\"\r\n        aria-labelledby=\"title-block_5b2eb7789fbeb24a99214a80eaa86d26_4356\">\r\n        <div class=\"accordion-body pb-3\">\r\n            \n\n<p class=\"wp-block-paragraph\">Verwenden Sie Umgebungsvariablen f\u00fcr Zugangsdaten in bereitgestellten Apps (CI\/CD, Container, Server) und\u00a0getpass() f\u00fcr interaktive lokale Skripte.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Umgebungsvariablen halten Geheimnisse aus der Quellcodeverwaltung und aus Protokollen fern. Speichern Sie Werte wie SMTP-Benutzernamen\/-Passw\u00f6rter oder API-Schl\u00fcssel\u00a0als SMTP_USER, SMTP_PASS, MAILGUN_API_KEY usw. und lesen Sie diese zur Laufzeit aus.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">getpass.getpass() fragt sicher nach einem Passwort, ohne es im Terminal anzuzeigen\u00a0\u2013 n\u00fctzlich f\u00fcr schnelle Skripte oder lokale Tests.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein g\u00e4ngiges Muster\u00a0ist:\u00a0Lesen Sie zuerst aus der env-Datei\u00a0und greifen Sie nur dann auf\u00a0getpass() zur\u00fcck, wenn keine Daten vorhanden sind.\u00a0<\/p>\n\n\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\n\n\r\n\r\n<div class=\"accordion-item py-2 border-bottom\">\r\n    <div\r\n        id=\"title-block_1335f117e1bb2b57dfac7ab7b4fa5dde_6474\"\r\n        class=\"accordion-header pb-3\">\r\n\r\n        <button\r\n            class=\"accordion-button fs-5 collapsed\"\r\n            type=\"button\"\r\n            data-bs-toggle=\"collapse\"\r\n            data-bs-target=\"#accordion-collapse-block_1335f117e1bb2b57dfac7ab7b4fa5dde_6474\"\r\n            aria-expanded=\"false\"\r\n            aria-controls=\"accordion-collapse-block_1335f117e1bb2b57dfac7ab7b4fa5dde_6474\">\r\n            Welche Vorteile bietet Yagmail im Vergleich zu smtplib f\u00fcr Gmail-Nutzende?         <\/button>\r\n    <\/div>\r\n    <div\r\n        id=\"accordion-collapse-block_1335f117e1bb2b57dfac7ab7b4fa5dde_6474\"\r\n        class=\"accordion-collapse collapse\"\r\n        aria-labelledby=\"title-block_1335f117e1bb2b57dfac7ab7b4fa5dde_6474\">\r\n        <div class=\"accordion-body pb-3\">\r\n            \n\n<p class=\"wp-block-paragraph\">Yagmail\u00a0wurde speziell f\u00fcr Gmail-Workflows entwickelt, reduziert so den SMTP-Boilerplate-Code und vereinfacht h\u00e4ufige Gmail-Aufgaben.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wesentliche Vorteile f\u00fcr Gmail-Nutzende:\u00a0<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Weniger Code:<\/strong> minimaler Aufwand f\u00fcr den Versand von Nachrichten, HTML und Anh\u00e4ngen.\u00a0<\/li>\n\n\n\n<li><strong>Auf Gmail ausgerichtete Ergonomie: <\/strong>benutzerfreundlichere API zum Erstellen von Nachrichten und f\u00fcr den Umgang mit Anh\u00e4ngen.\u00a0<\/li>\n\n\n\n<li><strong>Schnellere Iteration: <\/strong>ideal f\u00fcr Skripte und interne Tools, bei denen der E-Mail-Versand einfach ablaufen soll, ohne MIME-Teile manuell verwalten zu m\u00fcssen.\u00a0<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn\u00a0Sie\u00a0ausschlie\u00dflich \u00fcber Gmail senden und weniger bewegliche Teile als bei der reinen\u00a0smtplib-\u00a0und MIME-Konstruktion w\u00fcnschen, ist\u00a0Yagmail\u00a0oft der schnellste Weg.\u00a0<\/p>\n\n\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\n\n\r\n\r\n<div class=\"accordion-item py-2 border-bottom\">\r\n    <div\r\n        id=\"title-block_089f5f5c7e29b8e0cdfab910ef0e734c_2420\"\r\n        class=\"accordion-header pb-3\">\r\n\r\n        <button\r\n            class=\"accordion-button fs-5 collapsed\"\r\n            type=\"button\"\r\n            data-bs-toggle=\"collapse\"\r\n            data-bs-target=\"#accordion-collapse-block_089f5f5c7e29b8e0cdfab910ef0e734c_2420\"\r\n            aria-expanded=\"false\"\r\n            aria-controls=\"accordion-collapse-block_089f5f5c7e29b8e0cdfab910ef0e734c_2420\">\r\n            Wie implementiere ich das DKIM-Signieren und Template-Rendering mit der Bibliothek python-emails?         <\/button>\r\n    <\/div>\r\n    <div\r\n        id=\"accordion-collapse-block_089f5f5c7e29b8e0cdfab910ef0e734c_2420\"\r\n        class=\"accordion-collapse collapse\"\r\n        aria-labelledby=\"title-block_089f5f5c7e29b8e0cdfab910ef0e734c_2420\">\r\n        <div class=\"accordion-body pb-3\">\r\n            \n\n<p class=\"wp-block-paragraph\">Mit python-emails gehen Sie\u00a0normalerweise wie folgt vor:\u00a0<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Rendern Sie eine Vorlage (oft HTML + Text) mithilfe der Templating-Hilfen der Bibliothek (oder \u00fcbergeben Sie vorab gerenderte Inhalte aus Ihrer eigenen Template-Engine).\u00a0<\/li>\n\n\n\n<li>F\u00fcgen Sie vor dem Senden DKIM-Einstellungen \u00fcber den privaten DKIM-Schl\u00fcssel und den Selektor Ihrer Domain hinzu.\u00a0<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In der Praxis bedeutet dies:\u00a0<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ein E-Mail-Objekt (Betreff\/Von\/An) erstellen\u00a0<\/li>\n\n\n\n<li>gerenderte HTML-\/Textk\u00f6rper (und optional Variablen f\u00fcr Vorlagen) bereitstellen\u00a0<\/li>\n\n\n\n<li>das DKIM-Signieren konfigurieren mittels:\u00a0\n<ul class=\"wp-block-list\">\n<li>einem Selektor (z. B.\u00a0mailgun\u00a0oder default)\u00a0<\/li>\n\n\n\n<li>Ihrer Signaturdomain\u00a0<\/li>\n\n\n\n<li>dem privaten DKIM-Schl\u00fcssel (sicher aus Umgebungsvariablen oder einem Secrets Manager geladen)\u00a0<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Halten Sie den privaten DKIM-Schl\u00fcssel in der Produktionsumgebung aus dem Quellcode fern (\u00fcber Umgebungsvariablen oder gemountete Secret-Dateien) und\u00a0validieren\u00a0Sie das Signieren, indem Sie die Nachrichten-Kopfzeilen in einem Postfach pr\u00fcfen, das die DKIM-Signatur und die Authentifizierungsergebnisse anzeigt.\u00a0<\/p>\n\n\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\n\r\n\r\n\r\n\r\n\r\n    <\/div>\r\n\r\n    \r\n\n\n    <div data-content-type=\"longform\" class=\"longform-spacings\">\r\n        <div class=\"cta bg-primary rounded-lg px-5 py-6 p-md-7 px-md-6\">\r\n                    <div class=\"form-subscription\">\r\n                            <div class=\"h4 mb-3\">\r\n                    Bleiben Sie informiert! Erhalten Sie jede Woche wertvolle Inhalte direkt in Ihr Posteingang.                <\/div>\r\n                                    <form accept-charset=\"UTF-8\" action=\"\" enctype=\"multipart\/form-data\" data-form-subscription method=\"POST\" style=\"max-width: 400px;\">\r\n                <div class=\"row justify-content-between align-items-top g-2\">\r\n                    <div class=\"col-10\">\r\n                        <input type=\"email\" name=\"email\" class=\"form-control\" placeholder=\"Email\" autocomplete=\"email\" required>\r\n                        <div data-fs=\"error\" role=\"alert\" class=\"invalid-feedback\">\r\n                            Please complete this required field.                        <\/div>\r\n                    <\/div>\r\n                                            <div class=\"col-12 order-last mt-3 fs-xxs\" data-fs=\"acceptance\" style=\"display:none;\">\r\n                            \r\n                                <div class=\"form-check\">\r\n                                    <input id=\"formSubscriptionAcceptance-terms-4471\" class=\"form-check-input\"\r\n                                        type=\"checkbox\" name=\"terms\">\r\n                                    <label for=\"formSubscriptionAcceptance-terms-4471\" class=\"form-check-label text-body-color\">\r\n                                        Ich habe die Servicebedingungen gelesen und stimme ihnen zu.                                        <span class=\"hs-form-required\">*<\/span>\r\n                                    <\/label>\r\n                                <\/div>\r\n\r\n                            \r\n                                <div class=\"form-check\">\r\n                                    <input id=\"formSubscriptionAcceptance-privacy-1671\" class=\"form-check-input\"\r\n                                        type=\"checkbox\" name=\"privacy\">\r\n                                    <label for=\"formSubscriptionAcceptance-privacy-1671\" class=\"form-check-label text-body-color\">\r\n                                        Ich habe die Datenschutzerkl\u00e4rung gelesen und bin damit einverstanden.                                        <span class=\"hs-form-required\">*<\/span>\r\n                                    <\/label>\r\n                                <\/div>\r\n\r\n                                                    <\/div>\r\n                    \r\n                                            <div class=\"col-12 order-last fs-xxs mb-0 mt-2 text-body-color\">\r\n                            Senden Sie mir den Mailjet-Newsletter. Ich bin mit dem Erhalt des Newsletters einverstanden und wei\u00df, dass ich mich jederzeit unkompliziert wieder abmelden kann.                        <\/div>\r\n                    \r\n                    <div class=\"col-2\">\r\n                        <button type=\"submit\" value=\"Submit\" aria-label=\"Submit\" class=\"btn btn-secondary btn-icon\">\r\n                            <svg aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/layout\/chevron-right.svg\"><\/svg>\r\n                        <\/button>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <input type=\"hidden\" name=\"formSubscriptionRecaptchaToken\" data-fs=\"recaptcha-token\">\r\n                <input type=\"hidden\" name=\"customListID\" value=\"\">\r\n\r\n            <\/form>\r\n            <div data-fs=\"message-success\" style=\"display: none;\">\r\n                <p class=\"mb-0 mt-2 text-body-color\">\r\n                    Pr\u00fcfen Sie Ihren Posteingang jeden Monat auf Ihren Mailjet Newsletter!                <\/p>\r\n            <\/div>\r\n        <\/div>\r\n        <\/div>\r\n    <\/div>\r\n","protected":false},"excerpt":{"rendered":"<p>M\u00f6chten Sie Ihren E-Mail-Versand mit Python3 optimieren? Unsere Python-Fachleute haben einen umfassenden Leitfaden f\u00fcr Sie zusammengestellt. In diesem Tutorial zeigen wir Ihnen detailliert, wie Sie E-Mails mit Python3 und der E-Mail-API von Sinch Mailgun programmatisch versenden.<\/p>\n","protected":false},"author":11,"featured_media":4843,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[23],"class_list":["post-24994","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-it-and-engineering"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Leitfaden zur Python E-Mail-API: E-Mails versenden mit Mailgun - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Erfahren Sie in unserem Schritt-f\u00fcr-Schritt-Tutorial, wie Sie den programmatischen E-Mail-Versand mit Python und der E-Mail-API von Mailgun integrieren. Starten Sie noch heute m\u00fchelos mit dem E-Mail-Versand.\" \/>\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\/it-and-engineering\/e-mails-versenden-mit-python\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Leitfaden zur Python E-Mail-API: E-Mails versenden mit Mailgun - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Erfahren Sie in unserem Schritt-f\u00fcr-Schritt-Tutorial, wie Sie den programmatischen E-Mail-Versand mit Python und der E-Mail-API von Mailgun integrieren. Starten Sie noch heute m\u00fchelos mit dem E-Mail-Versand.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/e-mails-versenden-mit-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-16T19:09:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.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=\"13\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\\\/it-and-engineering\\\/e-mails-versenden-mit-python\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/it-and-engineering\\\/e-mails-versenden-mit-python\\\/\",\"name\":\"Leitfaden zur Python E-Mail-API: E-Mails versenden mit Mailgun - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/it-and-engineering\\\/e-mails-versenden-mit-python\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/it-and-engineering\\\/e-mails-versenden-mit-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"datePublished\":\"2026-01-15T13:06:37+00:00\",\"dateModified\":\"2026-09-16T19:09:14+00:00\",\"description\":\"Erfahren Sie in unserem Schritt-f\u00fcr-Schritt-Tutorial, wie Sie den programmatischen E-Mail-Versand mit Python und der E-Mail-API von Mailgun integrieren. Starten Sie noch heute m\u00fchelos mit dem E-Mail-Versand.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/it-and-engineering\\\/e-mails-versenden-mit-python\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/it-and-engineering\\\/e-mails-versenden-mit-python\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/it-and-engineering\\\/e-mails-versenden-mit-python\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/it-and-engineering\\\/e-mails-versenden-mit-python\\\/#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\":\"E-Mail-Versand mit Python3 und der Mailgun-API\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Leistungsstarke Transaktions-E-Mail-APIs, mit denen Sie E-Mails senden, empfangen und nachverfolgen k\u00f6nnen, speziell f\u00fcr Entwickler konzipiert. Erfahren Sie noch heute mehr!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Transactional Email API Service For Developers | Mailgun\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Leitfaden zur Python E-Mail-API: E-Mails versenden mit Mailgun - Transactional Email API Service For Developers | Mailgun","description":"Erfahren Sie in unserem Schritt-f\u00fcr-Schritt-Tutorial, wie Sie den programmatischen E-Mail-Versand mit Python und der E-Mail-API von Mailgun integrieren. Starten Sie noch heute m\u00fchelos mit dem E-Mail-Versand.","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\/it-and-engineering\/e-mails-versenden-mit-python\/","og_locale":"de_DE","og_type":"article","og_title":"Leitfaden zur Python E-Mail-API: E-Mails versenden mit Mailgun - Transactional Email API Service For Developers | Mailgun","og_description":"Erfahren Sie in unserem Schritt-f\u00fcr-Schritt-Tutorial, wie Sie den programmatischen E-Mail-Versand mit Python und der E-Mail-API von Mailgun integrieren. Starten Sie noch heute m\u00fchelos mit dem E-Mail-Versand.","og_url":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/e-mails-versenden-mit-python\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","article_modified_time":"2026-09-16T19:09:14+00:00","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"13\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/e-mails-versenden-mit-python\/","url":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/e-mails-versenden-mit-python\/","name":"Leitfaden zur Python E-Mail-API: E-Mails versenden mit Mailgun - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/e-mails-versenden-mit-python\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/e-mails-versenden-mit-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","datePublished":"2026-01-15T13:06:37+00:00","dateModified":"2026-09-16T19:09:14+00:00","description":"Erfahren Sie in unserem Schritt-f\u00fcr-Schritt-Tutorial, wie Sie den programmatischen E-Mail-Versand mit Python und der E-Mail-API von Mailgun integrieren. Starten Sie noch heute m\u00fchelos mit dem E-Mail-Versand.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/e-mails-versenden-mit-python\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/e-mails-versenden-mit-python\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/e-mails-versenden-mit-python\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/e-mails-versenden-mit-python\/#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":"E-Mail-Versand mit Python3 und der Mailgun-API"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/de\/#website","url":"https:\/\/www.mailgun.com\/de\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Leistungsstarke Transaktions-E-Mail-APIs, mit denen Sie E-Mails senden, empfangen und nachverfolgen k\u00f6nnen, speziell f\u00fcr Entwickler konzipiert. Erfahren Sie noch heute mehr!","publisher":{"@id":"https:\/\/www.mailgun.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/de\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.mailgun.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","width":512,"height":512,"caption":"Transactional Email API Service For Developers | Mailgun"},"image":{"@id":"https:\/\/www.mailgun.com\/de\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/24994","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\/11"}],"version-history":[{"count":1,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/24994\/revisions"}],"predecessor-version":[{"id":24995,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/24994\/revisions\/24995"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/media\/4843"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/media?parent=24994"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog_category?post=24994"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}