E-Mail-Versand in C# (.NET): SmtpClient, MailKit und MimeKit
Der Versand von E-Mails ist eine grundlegende Aufgabe in modernen Anwendungen. Im C# (.NET)-Ökosystem gibt es sowohl integrierte Mittel (Klasse SmtpClient) als auch leistungsstarke Drittanbieter-Bibliotheken (MailKit und MimeKit). In dieser Anleitung werden wir beide Ansätze im Detail besprechen, Codebeispiele, die Konfiguration eines SMTP-Servers, die Arbeit mit Anhängen und HTML-E-Mails betrachten.
1. Integrierter SmtpClient (System.Net.Mail)
Die Klasse SmtpClient ist in .NET Framework und .NET Core/5+ (mit Einschränkungen) verfügbar. Sie ist einfach zu verwenden, unterstützt jedoch keine modernen Protokolle (z. B. OAuth2) und gilt für neue Projekte als veraltet.
2. Installation und Einbindung von MailKit
MailKit ist eine plattformübergreifende Bibliothek für die Arbeit mit E-Mails. Sie ist vollständig asynchron, unterstützt SSL/TLS, OAuth2, S/MIME und andere moderne Funktionen. Installation über NuGet:
dotnet add package MailKitdotnet add package MimeKitOder über die Paket-Manager-Konsole:
Install-Package MailKitInstall-Package MimeKit3. Beispiel für den Versand einer einfachen E-Mail mit SmtpClient
Ein einfaches Beispiel mit dem integrierten SmtpClient:
using System.Net;using System.Net.Mail;
public void SendSimpleEmail(){ var fromAddress = new MailAddress("sender@example.com", "Absender"); var toAddress = new MailAddress("recipient@example.com", "Empfänger"); const string fromPassword = "your_password"; const string subject = "Betreff der E-Mail"; const string body = "Text der E-Mail";
var smtp = new SmtpClient { Host = "smtp.example.com", Port = 587, EnableSsl = true, DeliveryMethod = SmtpDeliveryMethod.Network, UseDefaultCredentials = false, Credentials = new NetworkCredential(fromAddress.Address, fromPassword) };
using (var message = new MailMessage(fromAddress, toAddress) { Subject = subject, Body = body }) { smtp.Send(message); }}Wichtig: Für Gmail, Yandex und andere Dienste muss ein App-Passwort oder OAuth2 verwendet werden.
4. E-Mail-Versand mit MailKit (empfohlene Methode)
MailKit bietet eine flexiblere und modernere API. Beispiel für den Versand einer einfachen Text-E-Mail:
using MailKit.Net.Smtp;using MailKit.Security;using MimeKit;using System.Threading.Tasks;
public async Task SendEmailWithMailKitAsync(){ var message = new MimeMessage(); message.From.Add(new MailboxAddress("Absender", "sender@example.com")); message.To.Add(new MailboxAddress("Empfänger", "recipient@example.com")); message.Subject = "Betreff der E-Mail"; message.Body = new TextPart("plain") { Text = "Text der E-Mail" };
using (var client = new SmtpClient()) { await client.ConnectAsync("smtp.example.com", 587, SecureSocketOptions.StartTls); await client.AuthenticateAsync("sender@example.com", "your_password"); await client.SendAsync(message); await client.DisconnectAsync(true); }}5. Versand einer HTML-E-Mail mit Anhängen
Erstellung einer mehrteiligen E-Mail (HTML + Anhänge) mit MimeKit:
public async Task SendHtmlEmailWithAttachmentAsync(){ var message = new MimeMessage(); message.From.Add(new MailboxAddress("Absender", "sender@example.com")); message.To.Add(new MailboxAddress("Empfänger", "recipient@example.com")); message.Subject = "HTML-E-Mail mit Anhang";
var bodyBuilder = new BodyBuilder { HtmlBody = @"<h1>Hallo!</h1><p>Dies ist eine HTML-E-Mail mit Anhang.</p>", TextBody = "Dies ist eine Text