{"id":20266,"date":"2024-12-11T00:00:00","date_gmt":"2024-12-11T00:00:00","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/email-mit-c-sharp-versenden\/"},"modified":"2026-09-14T22:53:24","modified_gmt":"2026-09-14T22:53:24","slug":"email-mit-c-sharp-versenden","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/email-mit-c-sharp-versenden\/","title":{"rendered":"E-Mail-Versand mit C# und der Mailgun-API"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">.NET geh\u00f6rt zu den  <a href=\"https:\/\/survey.stackoverflow.co\/2024\/technology#2-web-frameworks-and-technologies\" target=\"_tabs\" rel=\"noopener noreferrer\">beliebtesten, stabilsten und am meisten gesch\u00e4tzten Web-Frameworks<\/a> , die f\u00fcr die Entwicklung moderner Webanwendungen zur Verf\u00fcgung stehen. Die von .NET bereitgestellten Tools helfen Ihnen beim schnellen Einstieg und bei der langfristigen Wartung Ihrer Anwendungen. Damit entwickeln Sie alles von kleinen, hochspezialisierten Microservices bis hin zu vollwertigen Webanwendungen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Letztendlich muss jedoch jede reale Anwendung in der Lage sein,  <a href=\"https:\/\/www.mailgun.com\/solutions\/use-cases\/transactional-email\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Transaktions-E-Mails<\/a>  (wie etwa die Verifizierung von Konten, das Zur\u00fccksetzen von Passw\u00f6rtern, automatisierte t\u00e4gliche oder monatliche Berichte und vieles mehr) zu versenden. Zwar bietet .NET Tools f\u00fcr den Versand von E-Mails, es verf\u00fcgt jedoch nicht \u00fcber die produktionsf\u00e4hige Infrastruktur, die f\u00fcr einen zuverl\u00e4ssigen und effizienten Versand erforderlich ist.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In diesem Artikel erfahren Sie, wie Sie die HTTP-API von Mailgun nutzen, um Transaktions-E-Mails aus Ihren .NET-Anwendungen zu versenden und sicherzustellen, dass Ihre Integration zuverl\u00e4ssig, skalierbar und sicher ist.<\/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-5398\"><p class=\"h5 m-0\" id=\"toc-title-5398\">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=\"#e-mails-ueber-die-mailgun-api-versenden\">E-Mails \u00fcber die Mailgun-API versenden<\/a><a class=\"scrollme link-body-color\" href=\"#mailgun-konto-einrichten\">Mailgun-Konto einrichten<\/a><a class=\"scrollme link-body-color\" href=\"#neues-c-projekt-erstellen\">Neues C#-Projekt erstellen<\/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=\"#mehr-ueber-die-endpunkte-der-mailgun-api\">Mehr \u00fcber die Endpunkte der Mailgun-API<\/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=\"#die-erste-e-mail-mit-der-mailgun-api-versenden\">Die erste E-Mail mit der Mailgun-API versenden<\/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=\"#antworten-und-fehler-behandeln\">Antworten und Fehler behandeln<\/a><a class=\"scrollme link-body-color\" href=\"#fehlercodes-400-behandeln\">Fehlercodes 400 behandeln<\/a><a class=\"scrollme link-body-color\" href=\"#fehlercodes-500-behandeln\">Fehlercodes 500 behandeln<\/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=\"#produktionsbereite-e-mail-integration\">Produktionsbereite E-Mail-Integration<\/a><a class=\"scrollme link-body-color\" href=\"#api-schluessel-absichern\">API-Schl\u00fcssel absichern<\/a><a class=\"scrollme link-body-color\" href=\"#weitere-funktionen-auf-produktionsniveau\">Weitere Funktionen auf Produktionsniveau<\/a><a class=\"scrollme link-body-color\" href=\"#integration-in-das-net-oekosystem\">Integration in das .NET-\u00d6kosystem<\/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=\"#zusammenfassung\">Zusammenfassung<\/a><\/div><\/div><\/nav>\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\"> <a href='https:\/\/www.mailgun.com\/'>Mailgun<\/a> ist ein Transaktions-E-Mail-Service, der Ihre .NET-Anwendungen f\u00fcr den Versand produktionsbereiter E-Mails r\u00fcstet. Sie haben die Wahl zwischen dem <a href='https:\/\/www.mailgun.com\/features\/smtp-server\/'>SMTP-Service<\/a> von Mailgun oder seiner <a href='https:\/\/www.mailgun.com\/features\/email-api\/'>HTTP-API<\/a> f\u00fcr eine noch leistungsst\u00e4rkere Zustellung von Transaktions-E-Mails.<\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">E-Mails \u00fcber die Mailgun-API versenden<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bevor Sie mit diesem Tutorial beginnen, ben\u00f6tigen Sie die folgenden Voraussetzungen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Grundkenntnisse in C# und .NET<\/li>\n\n\n\n<li>Eine moderne IDE wie Visual Studio, JetBrains Rider oder Visual Studio Code<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Sie Visual Studio nicht nutzen und die Ausf\u00fchrung von dotnet &#8211;info in einem Terminal nicht erfolgreich ist, m\u00fcssen Sie  <a href=\"https:\/\/dotnet.microsoft.com\/en-us\/download\" target=\"_tabs\" rel=\"noopener noreferrer\">das neueste .NET-SDK herunterladen und installieren<\/a>.<\/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\"> .NET ist ein plattform\u00fcbergreifendes Framework. Sie k\u00f6nnen es also unter Windows, Mac und Linux installieren. Wenn Sie Probleme bei der Erstellung eines API-Schl\u00fcssels haben, finden Sie in <a href='https:\/\/help.mailgun.com\/hc\/en-us\/articles\/203380100-Where-can-I-find-my-API-keys-and-SMTP-credentials'>dieser Anleitung<\/a> weitere Informationen.<\/div>\r\n    <\/div>\r\n\n\n\n<h3 class=\"wp-block-heading\">Mailgun-Konto einrichten<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Beginnen Sie, indem Sie  <a href=\"https:\/\/signup.mailgun.com\/new\/signup\" target=\"_tabs\" rel=\"noopener noreferrer\">ein kostenloses Mailgun-Konto erstellen<\/a>. Sobald Sie eingeloggt sind, erstellen Sie einen neuen API-Schl\u00fcssel und speichern diesen f\u00fcr die sp\u00e4tere Verwendung.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr den produktiven E-Mail-Versand m\u00fcssen Sie eine eigene Domain bei Mailgun registrieren. In diesem Tutorial nutzen Sie die  <a href=\"https:\/\/app.mailgun.com\/mg\/sending\/domains?domains=%7B%22limit%22%3A10%2C%22region%22%3A%22us1%22%2C%22search%22%3A%22sandbox%22%2C%22skip%22%3A0%7D\" target=\"_tabs\" rel=\"noopener noreferrer\">Sandbox-Domain<\/a> , die von Mailgun bereitgestellt wird.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Neues C#-Projekt erstellen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sobald Ihr Mailgun-Konto eingerichtet ist, erstellen Sie eine neue .NET-MVC-Webl\u00f6sung und konfigurieren einige zus\u00e4tzliche Tools, die Sie beim Versand von Transaktions-E-Mails mit .NET unterst\u00fctzen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6ffnen Sie ein Terminal und f\u00fchren Sie dotnet new mvc -n MailDemo aus. Dieser Befehl erstellt ein neues .NET-Webprojekt mit einer MVC-Architektur in einem neuen Ordner namens \/MailDemo. F\u00fchren Sie als N\u00e4chstes cd MailDemo aus, um in den neu erstellten Ordner zu navigieren.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nachdem Sie in den Ordner navigiert sind, f\u00fcgen Sie Ihre Konfigurationswerte zur Datei appsettings.json hinzu. F\u00fcgen Sie einen neuen JSON-Eintrag namens &#8222;Mailgun&#8220; hinzu. Der Wert f\u00fcr Mailgun:ApiKey ist der API-Schl\u00fcssel, den Sie im vorherigen Abschnitt erstellt haben (mehr zur Absicherung Ihrer API-Schl\u00fcssel erfahren Sie sp\u00e4ter). Mailgun:Domain ist die Sandbox-Domain, die bereits f\u00fcr Sie erstellt wurde.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ihre gesamte Datei appsettings.json sollte wie folgt aussehen:<\/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                                C#                            <\/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-csharp\">\r\n                                <code id=\"code_0_content\" class=\"language-csharp\">\r\n\r\n                                    {rn    &quot;Logging&quot;: {rn        &quot;LogLevel&quot;: {rn            &quot;Default&quot;: &quot;Information&quot;,rn            &quot;Microsoft.AspNetCore&quot;: &quot;Warning&quot;rn        }rn    },rn    &quot;AllowedHosts&quot;: &quot;*&quot;,rn    &quot;Mailgun&quot;: {rn        &quot;ApiKey&quot;: &quot;&lt;Your API Key&gt;&quot;,rn        &quot;Domain&quot;: &quot;&lt;Your sandbox domain&gt;&quot;rn    }rn}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Als N\u00e4chstes konfigurieren Sie einen  <a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/core\/extensions\/httpclient-factory#named-clients\" target=\"_tabs\" rel=\"noopener noreferrer\">benannten HttpClient<\/a> , um Standardparameter einfach wiederzuverwenden. \u00d6ffnen Sie dazu Program.cs. Der obere Teil der Datei sollte so aussehen:<\/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                                C#                            <\/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-csharp\">\r\n                                <code id=\"code_0_content\" class=\"language-csharp\">\r\n\r\n                                    using System.Net.Http.Headers;rnusing System.Text;rnrnvar builder = WebApplication.CreateBuilder(args);rnrn\/\/ Add services to the containerrnbuilder.Services.AddControllersWithViews();rnrn\/\/ Set up your named HttpClient for easy reusernbuilder.Services.AddHttpClient(&quot;Mailgun&quot;, client =&gt;rn{rn    \/\/ Grab values from the configurationrn    var apiKey = builder.Configuration.GetValue&lt;string&gt;(&quot;Mailgun:ApiKey&quot;);rn    var base64Auth = Convert.ToBase64String(Encoding.ASCII.GetBytes($&quot;api:{apiKey}&quot;));rn    var domain = builder.Configuration.GetValue&lt;string&gt;(&quot;Mailgun:Domain&quot;);rnrn    \/\/ Set default values on the HttpClientrn    client.BaseAddress = new Uri($&quot;https:\/\/api.mailgun.net\/v3\/{domain}\/messages&quot;);rn    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(&quot;Basic&quot;, base64Auth);rn});rnrnvar app = builder.Build();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\">Da Sie ausschlie\u00dflich E-Mails versenden, wird Ihr HttpClient mit der vollst\u00e4ndigen URL der HTTP-API von Mailgun konfiguriert, die f\u00fcr den E-Mail-Versand genutzt wird.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zu diesem Zeitpunkt ist alles bereit, was Sie f\u00fcr den Versand Ihrer ersten E-Mail ben\u00f6tigen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mehr \u00fcber die Endpunkte der Mailgun-API<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Der HttpClient ist so konfiguriert, dass er HTTP-Anfragen an den Endpunkt https:\/\/api.mailgun.net\/v3\/{domain}\/messages sendet. Mailgun bietet zudem weitere Endpunkte, um Ihnen ein robustes und ganzheitliches Tool f\u00fcr die Verwaltung und den Versand von Transaktions-E-Mails zur Verf\u00fcgung zu stellen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>E-Mail versenden: POST \/v3\/{domain_name}\/messages<\/li>\n\n\n\n<li>E-Mail im MIME-Format versenden: POST \/v3\/{domain_name}\/messages.mime<\/li>\n\n\n\n<li>Eine gespeicherte E-Mail abrufen: GET \/v3\/domains\/{domain_name}\/messages\/{storage_key}<\/li>\n\n\n\n<li>Ihre Domains anzeigen: GET \/v4\/domains<\/li>\n\n\n\n<li>Eine neue Domain erstellen: POST \/v4\/domains<\/li>\n\n\n\n<li>Eine paginierte Liste aller eingehenden und ausgehenden Ereignisse anzeigen: GET \/v3\/{domain_name}\/events<\/li>\n\n\n\n<li>Eine paginierte Liste aller Bounces anzeigen: GET \/v3\/{domainID}\/bounces<\/li>\n<\/ul>\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\"> Weitere verf\u00fcgbare Endpunkte finden Sie in der <a href='https:\/\/documentation.mailgun.com\/docs\/mailgun\/api-reference\/openapi-final\/tag\/Messages\/'>API-Referenzdokumentation von Mailgun<\/a>.<\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">Die erste E-Mail mit der Mailgun-API versenden<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bevor Sie Ihre erste Transaktions-E-Mail versenden, stellen Sie sicher, dass die verwendete E-Mail-Adresse des Empf\u00e4ngers zu den autorisierten Empf\u00e4ngern f\u00fcr Ihre Sandbox-Domain geh\u00f6rt. \u00d6ffnen Sie in Ihrem Mailgun-Konto  <a href=\"https:\/\/app.mailgun.com\/mg\/sending\/domains\" target=\"_tabs\" rel=\"noopener noreferrer\">Ihre Domains<\/a>, w\u00e4hlen Sie Ihre Sandbox-Domain aus und f\u00fcgen Sie auf der rechten Seite Ihre pers\u00f6nliche E-Mail-Adresse als autorisierten Empf\u00e4nger hinzu:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4064\" width=\"1570\" height=\"812\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screenshot_2024-12-10_at_5.20.57_PM.png\" alt=\"Overview Screen\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screenshot_2024-12-10_at_5.20.57_PM.png 1570w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screenshot_2024-12-10_at_5.20.57_PM-300x155.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screenshot_2024-12-10_at_5.20.57_PM-768x397.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screenshot_2024-12-10_at_5.20.57_PM-1024x530.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screenshot_2024-12-10_at_5.20.57_PM-1536x794.png 1536w\" sizes=\"(max-width: 1570px) 100vw, 1570px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Erstellen Sie als N\u00e4chstes eine neue Datei unter \/Controllers\/OrderController.cs und ersetzen Sie deren Inhalt durch den folgenden:<\/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                                C#                            <\/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-csharp\">\r\n                                <code id=\"code_0_content\" class=\"language-csharp\">\r\n\r\n                                    using System.Diagnostics;rnusing Microsoft.AspNetCore.Mvc;rnusing MailDemo.Models;rnusing System.Text;rnusing System.Net.Mime;rnrnnamespace MailDemo.Controllers;rnrnpublic class OrderController : Controllerrn{rn    private readonly HttpClient _httpClient;rn    private readonly IConfiguration _config;rnrn    public OrderController(IHttpClientFactory httpClientFactory, IConfiguration config)rn    {rn        \/\/ Get your named HttpClient that is preconfiguredrn        this._httpClient = httpClientFactory.CreateClient(&quot;Mailgun&quot;);rn        this._config = config;rn    }rnrn    public async Task&lt;IActionResult&gt; Confirm()rn    {rn        using MultipartFormDataContent form = new();rnrn        \/\/ Local function keeps this code a bit clearerrn        void SetFormParam(string key, string value) =&gt;rn        form.Add(new StringContent(value, Encoding.UTF8, MediaTypeNames.Text.Plain), key);rnrn        SetFormParam(&quot;from&quot;, $&quot;Test User &lt;postmaster@{this._config.GetValue&lt;string&gt;(&quot;Mailgun:Domain&quot;)}&gt;&quot;);rn        SetFormParam(&quot;to&quot;, &quot;your_authorized_recipient.com&quot;);rn        SetFormParam(&quot;subject&quot;, &quot;Hello World!&quot;);rn        SetFormParam(&quot;text&quot;, &quot;My first transactional email!&quot;);rn        SetFormParam(&quot;html&quot;, @&quot;&lt;html&gt;&lt;body&gt;&lt;p style=&quot;&quot;color:blue;&quot;&quot;&gt;My first transactional email!&lt;\/p&gt;&lt;\/body&gt;&lt;\/html&gt;&quot;);rnrn        var result = await this._httpClient.PostAsync(string.Empty, form);rnrn        if (!result.IsSuccessStatusCode)rn        {rn            return new JsonResult(await result.Content.ReadAsStringAsync());rn        }rnrn        return new JsonResult(@&quot;Your order was confirmed. You should get an email soon!&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\">F\u00fchren Sie dotnet run in Ihrem Terminal aus, um Ihre Webanwendung zu starten. \u00d6ffnen Sie anschlie\u00dfend einen Webbrowser und navigieren Sie zu \/order\/confirm. Innerhalb weniger Sekunden sollten Sie eine E-Mail in Ihrem Posteingang erhalten:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4068\" width=\"1646\" height=\"936\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screenshot_2024-12-10_at_5.21.06_PM.png\" alt=\"Hello World Screen Shot\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screenshot_2024-12-10_at_5.21.06_PM.png 1646w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screenshot_2024-12-10_at_5.21.06_PM-300x171.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screenshot_2024-12-10_at_5.21.06_PM-768x437.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screenshot_2024-12-10_at_5.21.06_PM-1024x582.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screenshot_2024-12-10_at_5.21.06_PM-1536x873.png 1536w\" sizes=\"(max-width: 1646px) 100vw, 1646px\" \/><\/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\"> Die E-Mail k\u00f6nnte in Ihrem Spam-Ordner landen, da Sie die Domain noch nicht registriert haben. F\u00fcr den Moment ist das in Ordnung.<\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">Antworten und Fehler behandeln<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Leider laufen die Dinge manchmal nicht wie geplant. Beispielsweise k\u00f6nnte Ihr API-Schl\u00fcssel einen Tippfehler enthalten, Sie haben m\u00f6glicherweise nicht alle erforderlichen Felder in die HTTP-Anfrage aufgenommen oder Sie sto\u00dfen an die Ratenbegrenzungen von Mailgun.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eine fehlgeschlagene HTTP-Anfrage an die API von Mailgun gibt einen von vier verschiedenen HTTP-Fehlercodes zur\u00fcck:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>400: Etwas mit der Formatierung der Anfrage ist falsch.<\/li>\n\n\n\n<li>401: Die Authentifizierung ist fehlgeschlagen.<\/li>\n\n\n\n<li>429: Sie haben die Ratenbegrenzung von Mailgun erreicht.<\/li>\n\n\n\n<li>500: Etwas im Netzwerk oder aufseiten von Mailgun ist schiefgelaufen.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Sehen wir uns an, wie Sie einige dieser Fehlerszenarien handhaben.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fehlercodes 400 behandeln<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn der HTTP-Statuscode 400 zur\u00fcckgegeben wird, bedeutet das, dass Ihre Nutzdaten oder die Formatierung inkorrekt waren. Beispielsweise antwortet Mailgun mit einem HTTP-Statuscode 400, wenn ein erforderliches Feld fehlt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In diesen F\u00e4llen k\u00f6nnen Sie einen allgemeinen Ansatz verfolgen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Werfen Sie eine Ausnahme, da es sich hierbei um ein nicht behebbares Fehlerszenario handelt.<\/li>\n\n\n\n<li>Protokollieren Sie die Ausnahme und deren Ursachen.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Der Code hierf\u00fcr k\u00f6nnte wie folgt aussehen:<\/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                                C#                            <\/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-csharp\">\r\n                                <code id=\"code_0_content\" class=\"language-csharp\">\r\n\r\n                                    if (!result.IsSuccessStatusCode)rn{rn    var status = (int) result.StatusCode;rnrn    if (status == 400)rn    {rn        var responseContent = await result.Content.ReadAsStringAsync();rn        var exception = new BadHttpRequestException(&quot;Mailgun 400 HTTP status code&quot;);rnrn        this._logger.LogError(exception, exception.Message, responseContent);rn        throw exception;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\">Bei dem HTTP-Statuscode 401 empfiehlt sich ein \u00e4hnlicher Ansatz.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fehlercodes 500 behandeln<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Sie einen HTTP-Statuscode 500 erhalten, kann dies bedeuten, dass aufseiten von Mailgun etwas schiefgelaufen ist oder ein allgemeines Netzwerkproblem aufgetreten ist. F\u00fcr diese F\u00e4lle gibt es verschiedene Ans\u00e4tze, die Sie verfolgen k\u00f6nnen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Stellen Sie die E-Mail in eine Warteschlange, um den Versand sp\u00e4ter erneut zu versuchen.<\/li>\n\n\n\n<li>Versuchen Sie es im selben Code-Pfad nach kurzer Zeit erneut.<\/li>\n\n\n\n<li>Nutzen Sie eine fortgeschrittene Technik wie ein  <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/architecture\/patterns\/circuit-breaker\" target=\"_tabs\" rel=\"noopener noreferrer\">Circuit-Breaker-Muster<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ein grundlegender Wiederholungsansatz k\u00f6nnte wie folgt aussehen:<\/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                                C#                            <\/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-csharp\">\r\n                                <code id=\"code_0_content\" class=\"language-csharp\">\r\n\r\n                                    if (!result.IsSuccessStatusCode)rn{rn    var status = (int) result.StatusCode;rnrn    if (status == 500)rn    {rn        \/\/ Retry the email after 1 second in hopes that the error was transientrnrn        await Task.Delay(1000);rn        result = await _httpClient.PostAsync(string.Empty, form);rnrn        if (!result.IsSuccessStatusCode)rn        {rn            \/\/ Log and throw an exception like you did in the previous examplern        }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\">Wenn Sie in diesem Szenario den Statuscode 500 erhalten, warten Sie eine Sekunde und versuchen die HTTP-Anfrage erneut. Wenn die wiederholte Anfrage ebenfalls fehlschl\u00e4gt, protokollieren Sie dies und werfen eine Ausnahme, genau wie beim Szenario f\u00fcr den Statuscode 400.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um Ihnen eine Vorstellung davon zu geben, wie der gesamte Code aussehen k\u00f6nnte, finden Sie hier ein Grundger\u00fcst daf\u00fcr, wie Ihr Code mit der Behandlung verschiedener Fehlerszenarien beginnen kann:<\/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                                C#                            <\/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-csharp\">\r\n                                <code id=\"code_0_content\" class=\"language-csharp\">\r\n\r\n                                    if (!result.IsSuccessStatusCode)rn{rn    var status = (int)result.StatusCode;rnrn    if (status == 400)rn    {rn        \/\/ Log the error and notify the development team that thern        \/\/ request was not formatted properly.rn    }rn    else if (status == 401)rn    {rn        \/\/ Log the error and notify the development team that thern        \/\/ request&#039;s authentication failed.rn    }rn    else if (status == 429)rn    {rn        \/\/ Use a .NET library like Polly to throttle or try this requestrn        \/\/ again with an exponential back-off, etc.rn    }rn    elsern    {rn        \/\/ Something went wrong: log the error and apply a distributed rn        \/\/ error handling technique like a circuit breaker.rn        \/\/ See https:\/\/learn.microsoft.com\/en-us\/azure\/architecture\/patterns\/circuit-breaker for more.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<h2 class=\"wp-block-heading\">Produktionsbereite E-Mail-Integration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">An diesem Punkt haben Sie eine E-Mail mit .NET und C# versendet. F\u00fcr die Produktionsbereitschaft gibt es jedoch noch einige wichtige Dinge zu beachten.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">API-Schl\u00fcssel absichern<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Sie d\u00fcrfen Ihren echten produktiven API-Schl\u00fcssel <\/b><b><i>nicht<\/i><\/b><b> im Quellcode speichern<\/b>. Dar\u00fcber hinaus sollte er f\u00fcr niemanden in reinen Textdateien zug\u00e4nglich sein.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es gibt viele Tools, mit denen Sie Ihren API-Schl\u00fcssel absichern k\u00f6nnen. Jeder Cloud-Anbieter verf\u00fcgt \u00fcber ein eigenes Schl\u00fcsselverwaltungssystem, mit dem Ihre Anwendung Geheimnisse sicher abrufen kann. Zum Beispiel, <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/key-vault\/general\/overview\" target=\"_tabs\" rel=\"noopener noreferrer\">Azure Key Vault<\/a> oder <a href=\"https:\/\/docs.aws.amazon.com\/secretsmanager\/latest\/userguide\/intro.html\" target=\"_tabs\" rel=\"noopener noreferrer\">AWS Secrets Manager<\/a>  eignen sich hervorragend.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Weitere Funktionen auf Produktionsniveau<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mailgun unterst\u00fctzt zudem viele Funktionen auf Produktionsniveau, die Sie m\u00f6glicherweise ben\u00f6tigen, wie etwa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/user-manual\/sending-messages\/#send-with-attachments\" target=\"_tabs\" rel=\"noopener noreferrer\">Das Hinzuf\u00fcgen von Anh\u00e4ngen<\/a>  zu Ihren E-Mails<\/li>\n\n\n\n<li>Die M\u00f6glichkeit,  <a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/user-manual\/sending-messages\/#templates\" target=\"_tabs\" rel=\"noopener noreferrer\">wiederverwendbare E-Mail-Vorlagen zu erstellen<\/a><\/li>\n\n\n\n<li>Personalisierungsfunktionen wie  <a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/api-reference\/openapi-final\/tag\/Messages\/#tag\/Messages\/operation\/httpapi.(*apiHandler).handler-fm-19!path=o:tag&amp;t=request\" target=\"_tabs\" rel=\"noopener noreferrer\">Variablen und Tags<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/api-reference\/openapi-final\/tag\/Messages\/#tag\/Messages\/operation\/httpapi.(*apiHandler).handler-fm-19!path=cc&amp;t=request\" target=\"_tabs\" rel=\"noopener noreferrer\">CC-, BCC- und Reply-To-Kopfzeilen<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Integration in das .NET-\u00d6kosystem<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Um zu zeigen, wie einfach die Integration mit produktionsbereiten Tools aus dem .NET-\u00d6kosystem ist, nutzen Sie eine Open-Source-Bibliothek wie  <a href=\"https:\/\/github.com\/jamesmh\/coravel\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Coravel<\/a> , um die Wiederverwendbarkeit und die Developer Experience Ihrer L\u00f6sung zu verbessern.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fchren Sie im Ordner MailDemo den Befehl dotnet add package coravel.mailer in Ihrem Terminal aus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcgen Sie dann den folgenden JSON-Eintrag in Ihre Datei appsettings.json 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                                C#                            <\/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-csharp\">\r\n                                <code id=\"code_0_content\" class=\"language-csharp\">\r\n\r\n                                    &quot;Coravel&quot;: {rn    &quot;Mail&quot;: {rn        &quot;From&quot;: {rn            &quot;Name&quot;: &quot;Test User&quot;,rn            &quot;Email&quot;: &quot;postmaster@&lt;Your sandbox domain&gt;&quot;rn        }rn    }rn}rnNext, create a class file called MailgunMailer.cs that implements the ICanSendMail interface. You might notice that this is essentially the same logic you originally had in OrderController:rnusing System.Net.Mime;rnusing System.Text;rnusing Coravel.Mailer.Mail;rnrnnamespace MailDemo;rnrnpublic class MailgunMailer : ICanSendMailrn{rn    private readonly HttpClient _httpClient;rn    private readonly IConfiguration _config;rnrn    public MailgunMailer(IHttpClientFactory httpClientFactory, IConfiguration config)rn    {rn        this._httpClient = httpClientFactory.CreateClient(&quot;Mailgun&quot;);rn        this._config = config;rn    }rnrn    public async Task SendAsync(MessageBody message, string subject, IEnumerable&lt;MailRecipient&gt; to, MailRecipient from, MailRecipient replyTo, IEnumerable&lt;MailRecipient&gt; cc, IEnumerable&lt;MailRecipient&gt; bcc, IEnumerable&lt;Attachment&gt;? attachments = null, MailRecipient? sender = null)rn    {rn        using MultipartFormDataContent form = new();rnrn        void SetFormParam(string key, string value) =&gt;rn        form.Add(new StringContent(value, Encoding.UTF8, MediaTypeNames.Text.Plain), key);rnrn        if (from is not null)rn        {rn            SetFormParam(&quot;from&quot;, $&quot;{from.Name} &lt;{from.Email}&gt;&quot;);rn        }rn        elsern        {rn            \/\/ This gives you a default &quot;from&quot; field if not defined by the callerrn            SetFormParam(&quot;from&quot;, $&quot;{this._config.GetValue&lt;string&gt;(&quot;Coravel:Mail:From:Name&quot;)} &lt;{this._config.GetValue&lt;string&gt;(&quot;Coravel:Mail:From:Email&quot;)}&gt;&quot;);rn        }rnrn        foreach (var recipient in to)rn        {rn            SetFormParam(&quot;to&quot;, recipient.Email);rn        }rn        SetFormParam(&quot;subject&quot;, subject);rnrn        if (message.HasHtmlMessage())rn        {rn            SetFormParam(&quot;html&quot;, message.Html);rn        }rnrn        if (message.HasPlainTextMessage())rn        {rn            SetFormParam(&quot;text&quot;, message.Text);rn        }rnrn        var result = await _httpClient.PostAsync(string.Empty, form);rnrn        \/\/ Error handling logic...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\">Als N\u00e4chstes m\u00fcssen Sie Coravel anweisen, diesen Mailer zu verwenden. F\u00fcgen Sie in Ihrer Datei Program.cs vor dem Aufruf von var app = builder.Build() Folgendes hinzu:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                C#                            <\/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-csharp\">\r\n                                <code id=\"code_0_content\" class=\"language-csharp\">\r\n\r\n                                    builder.Services.AddScoped&lt;MailDemo.MailgunMailer&gt;();rnbuilder.AddCustomMailer&lt;MailDemo.MailgunMailer&gt;();rnFinally, replace the code for OrderController with the following:rnusing Microsoft.AspNetCore.Mvc;rnusing Coravel.Mailer.Mail.Interfaces;rnusing Coravel.Mailer.Mail;rnrnnamespace MailDemo.Controllers;rnrnpublic class OrderController : Controllerrn{rn    private readonly IMailer _mailer;rnrn    public OrderController(IMailer mailer)rn    {rn        this._mailer = mailer;rn    }rnrn    public async Task&lt;IActionResult&gt; Confirm()rn    {rn        var mailable = Mailable.AsInline()rn            .To(&quot;jamesmichaelhickey@gmail.com&quot;)rn            .Subject(&quot;Hello World!&quot;)rn            .Html(@&quot;&lt;html&gt;&lt;body&gt;&lt;p style=&quot;&quot;color:blue;&quot;&quot;&gt;My first transactional email!&lt;\/p&gt;&lt;\/body&gt;&lt;\/html&gt;&quot;)rn            .Text(&quot;My first transactional email!&quot;);rnrn        await _mailer.SendAsync(mailable);rnrn        return new JsonResult(@&quot;Your order was confirmed. You should get an email soon!&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\">Nach einer kurzen einmaligen Konfiguration werden Sie feststellen, dass die Logik f\u00fcr den E-Mail-Versand in Ihrem Anwendungscode deutlich verst\u00e4ndlicher und kompakter ist.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Durch Mailgun und Coravel haben Sie zudem die M\u00f6glichkeit hinzugef\u00fcgt, sowohl HTML- als auch reine Text-E-Mail-Inhalte zu definieren. Mailgun empfiehlt,  <a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/email-best-practices\/email_content\/\" target=\"_tabs\" rel=\"noopener noreferrer\">sowohl HTML als auch reinen Text gemeinsam zu versenden<\/a>. Es ist am besten, Multipart-E-Mails mit sowohl Text als auch HTML oder ausschlie\u00dflich als Text zu versenden. Der Versand reiner HTML-E-Mails wird von ESPs nicht gerne gesehen.<\/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\"> Mailgun und Coravel unterst\u00fctzen zudem weitere Funktionen wie CC, BCC und Anh\u00e4nge f\u00fcr Transaktions-E-Mails auf Produktionsniveau.<\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">Zusammenfassung<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.mailgun.com\/de\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Mailgun<\/a> bietet eine unkomplizierte  <a href=\"https:\/\/www.mailgun.com\/de\/funktionen\/email-api\/\" target=\"_tabs\" rel=\"noopener noreferrer\">HTTP-API<\/a> , um E-Mails aus Ihren .NET-L\u00f6sungen effizient und sicher zu versenden. In diesem Artikel haben Sie gelernt, wie Sie die HTTP-API von Mailgun in eine C#-Webanwendung integrieren und damit beginnen, Tools auf Produktionsniveau zusammen mit den produktionsbereiten Funktionen von Mailgun hinzuzuf\u00fcgen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Durch die gemeinsame Nutzung von Mailgun und .NET k\u00f6nnen Ihre Transaktions-E-Mails effizient skalieren, unterst\u00fctzt durch  <a href=\"https:\/\/ardalis.com\/better-performance-from-async-operations\/\" target=\"_tabs\" rel=\"noopener noreferrer\">die async\/await-Funktionalit\u00e4t von .NET<\/a>, die gesamte vom Framework bereitgestellte  <a href=\"https:\/\/www.techempower.com\/benchmarks\/#section=data-r21&amp;hw=ph&amp;test=composite\" target=\"_tabs\" rel=\"noopener noreferrer\">hochleistungsf\u00e4hige Web-Infrastruktur<\/a>, <a href=\"https:\/\/github.com\/jamesmh\/coravel\" target=\"_tabs\" rel=\"noopener noreferrer\">zus\u00e4tzliche Tools<\/a>  aus dem .NET-\u00d6kosystem sowie die performante und unkomplizierte HTTP-API von Mailgun.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">War das hilfreich? Abonnieren Sie unseren Newsletter, um Updates zu Tutorials, E-Mail-News und Einblicke von unseren hauseigenen E-Mail-Profis zu erhalten.<\/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_3f4c6f346a18371609f8261ba2884135\">\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_3f4c6f346a18371609f8261ba2884135\">\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>Meistern Sie den Versand von Transaktions-E-Mails mit der HTTP-API von Mailgun in C#. Dieser Leitfaden f\u00fchrt Sie durch die Einrichtung eines Mailgun-Kontos, die Integration mit .NET und die Fehlerbehandlung f\u00fcr eine produktionsbereite E-Mail-Zustellung.<\/p>\n","protected":false},"author":18,"featured_media":3952,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[19],"class_list":["post-20266","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-Mails in C# mit Mailgun-API versenden: Leitfaden - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Erfahren Sie, wie Sie E-Mails mit der Mailgun-API und C# f\u00fcr eine zuverl\u00e4ssige E-Mail-Zustellung versenden. Schritt-f\u00fcr-Schritt-Anleitung f\u00fcr Einrichtung, Fehlerbehandlung und Produktionsbereitschaft.\" \/>\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\/email-mit-c-sharp-versenden\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"E-Mails in C# mit Mailgun-API versenden: Leitfaden - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Erfahren Sie, wie Sie E-Mails mit der Mailgun-API und C# f\u00fcr eine zuverl\u00e4ssige E-Mail-Zustellung versenden. Schritt-f\u00fcr-Schritt-Anleitung f\u00fcr Einrichtung, Fehlerbehandlung und Produktionsbereitschaft.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/email-mit-c-sharp-versenden\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-14T22:53:24+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=\"7\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/email-mit-c-sharp-versenden\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/email-mit-c-sharp-versenden\\\/\",\"name\":\"E-Mails in C# mit Mailgun-API versenden: Leitfaden - 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\\\/email-mit-c-sharp-versenden\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/email-mit-c-sharp-versenden\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"datePublished\":\"2024-12-11T00:00:00+00:00\",\"dateModified\":\"2026-09-14T22:53:24+00:00\",\"description\":\"Erfahren Sie, wie Sie E-Mails mit der Mailgun-API und C# f\u00fcr eine zuverl\u00e4ssige E-Mail-Zustellung versenden. Schritt-f\u00fcr-Schritt-Anleitung f\u00fcr Einrichtung, Fehlerbehandlung und Produktionsbereitschaft.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/email-mit-c-sharp-versenden\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/email-mit-c-sharp-versenden\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/dev-life\\\/email-mit-c-sharp-versenden\\\/#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\\\/email-mit-c-sharp-versenden\\\/#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 C# 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":"E-Mails in C# mit Mailgun-API versenden: Leitfaden - Transactional Email API Service For Developers | Mailgun","description":"Erfahren Sie, wie Sie E-Mails mit der Mailgun-API und C# f\u00fcr eine zuverl\u00e4ssige E-Mail-Zustellung versenden. Schritt-f\u00fcr-Schritt-Anleitung f\u00fcr Einrichtung, Fehlerbehandlung und Produktionsbereitschaft.","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\/email-mit-c-sharp-versenden\/","og_locale":"de_DE","og_type":"article","og_title":"E-Mails in C# mit Mailgun-API versenden: Leitfaden - Transactional Email API Service For Developers | Mailgun","og_description":"Erfahren Sie, wie Sie E-Mails mit der Mailgun-API und C# f\u00fcr eine zuverl\u00e4ssige E-Mail-Zustellung versenden. Schritt-f\u00fcr-Schritt-Anleitung f\u00fcr Einrichtung, Fehlerbehandlung und Produktionsbereitschaft.","og_url":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/email-mit-c-sharp-versenden\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","article_modified_time":"2026-09-14T22:53:24+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":"7\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/email-mit-c-sharp-versenden\/","url":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/email-mit-c-sharp-versenden\/","name":"E-Mails in C# mit Mailgun-API versenden: Leitfaden - 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\/email-mit-c-sharp-versenden\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/email-mit-c-sharp-versenden\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","datePublished":"2024-12-11T00:00:00+00:00","dateModified":"2026-09-14T22:53:24+00:00","description":"Erfahren Sie, wie Sie E-Mails mit der Mailgun-API und C# f\u00fcr eine zuverl\u00e4ssige E-Mail-Zustellung versenden. Schritt-f\u00fcr-Schritt-Anleitung f\u00fcr Einrichtung, Fehlerbehandlung und Produktionsbereitschaft.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/email-mit-c-sharp-versenden\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/de\/blog\/dev-life\/email-mit-c-sharp-versenden\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.mailgun.com\/de\/blog\/dev-life\/email-mit-c-sharp-versenden\/#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\/email-mit-c-sharp-versenden\/#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 C# 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\/20266","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\/18"}],"version-history":[{"count":1,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/20266\/revisions"}],"predecessor-version":[{"id":20267,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/20266\/revisions\/20267"}],"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=20266"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog_category?post=20266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}