E-Mail-Versand in C# (.NET) mit SmtpClient und MailKit

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

E-Mail-Versand in C# (.NET): von SmtpClient bis MailKit

Das Versenden von E-Mails ist eine der Kernaufgaben bei der Entwicklung von Webanwendungen, Benachrichtigungsdiensten und Unternehmenssystemen. Im .NET-Ökosystem gibt es sowohl integrierte Werkzeuge als auch Drittanbieter-Bibliotheken, die die Arbeit mit SMTP, SSL/TLS und komplexen Szenarien vereinfachen. In diesem Artikel werden wir im Detail besprechen, wie man eine E-Mail in C# versendet, unter Verwendung des klassischen SmtpClient und der modernen Bibliothek MailKit.



1. Integrierter SmtpClient (System.Net.Mail)

Die Klasse SmtpClient ist in .NET Framework und .NET Core/5+ (mit einigen Einschränkungen) verfügbar. Sie ermöglicht die schnelle Konfiguration des E-Mail-Versands über jeden SMTP-Server.



Basisbeispiel für den E-Mail-Versand

using System.Net;using System.Net.Mail;

var smtpClient = new SmtpClient("smtp.gmail.com"){ Port = 587, Credentials = new NetworkCredential("your_email@gmail.com", "your_app_password"), EnableSsl = true};

var mailMessage = new MailMessage{ From = new MailAddress("your_email@gmail.com"), Subject = "Test-E-Mail aus C#", Body = "Hallo! Diese Nachricht wurde über SmtpClient gesendet.", IsBodyHtml = false};

mailMessage.To.Add("recipient@example.com");

try{ smtpClient.Send(mailMessage); Console.WriteLine("E-Mail erfolgreich gesendet!");}catch (Exception ex){ Console.WriteLine($"Fehler beim Senden: {ex.Message}");}

Wichtig: Für Gmail wird ein App-Passwort benötigt, nicht das normale Passwort. Für andere Dienste (Yandex, Mail.ru) überprüfen Sie die SMTP-Einstellungen.



Versand einer HTML-E-Mail mit Anhang

var message = new MailMessage();message.From = new MailAddress("sender@example.com");message.To.Add("user@example.com");message.Subject = "Monatsbericht";message.IsBodyHtml = true;message.Body = "<h2>Monatlicher Bericht</h2><p>Im Anhang befindet sich eine PDF-Datei.</p>";

// Anhang hinzufügenvar attachment = new Attachment(@"C:\\Reports\\report.pdf");message.Attachments.Add(attachment);

using (var client = new SmtpClient("smtp.example.com", 587)){ client.Credentials = new NetworkCredential("login", "password"); client.EnableSsl = true; client.Send(message);}

Anhänge können beliebigen Typs sein: Bilder, Dokumente, Archive. Für den Versand aus dem Speicher verwenden Sie MemoryStream.



2. Asynchroner Versand

In modernen Anwendungen ist es wünschenswert, den Thread nicht zu blockieren. Verwenden Sie SendMailAsync:

public async Task SendEmailAsync(){    using var client = new SmtpClient("smtp.example.com", 587);    client.Credentials = new NetworkCredential("login", "password");    client.EnableSsl = true;

var message = new MailMessage("from@example.com", "to@example.com") { Subject = "Asynchroner Versand", Body = "Diese E-Mail wurde asynchron gesendet." };

await client.SendMailAsync(message); Console.WriteLine("Asynchron gesendet!");}


3. Probleme mit SmtpClient und Alternativen

Trotz seiner Einfachheit hat SmtpClient Nachteile:

  • Veraltete API (in .NET 5+ als veraltet markiert);
  • Schlechte Unterstützung moderner Authentifizierungsprotokolle (OAuth2);
  • Keine integrierte Unterstützung für S/MIME und erweiterte Szenarien.

Daher empfiehlt Microsoft die Verwendung von Drittanbieter-Bibliotheken wie MailKit.



4. MailKit — moderne Bibliothek für die E-Mail-Verarbeitung

MailKit ist eine plattformübergreifende Open-Source-Bibliothek. Sie unterstützt SMTP, POP3, IMAP, SSL/TLS, Asynchronität, OAuth2 und vieles mehr.



Installation über NuGet

\

Empfehlungen