E-Mail-Versand mit C# (.NET): Bibliothek System.Net.Mail

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 mit C# (.NET): Vollständige Anleitung zu System.Net.Mail

In der modernen Entwicklung auf der .NET-Plattform wird die Aufgabe des E-Mail-Versands mit der Standardbibliothek System.Net.Mail gelöst. Dieses integrierte Tool erfordert keine Installation zusätzlicher NuGet-Pakete und bietet eine flexible API zum Erstellen und Senden von E-Mail-Nachrichten über einen SMTP-Server. In diesem Artikel werden wir alle Schlüsselkomponenten der Bibliothek im Detail analysieren, Codebeispiele, Fehlerbehandlung und bewährte Verfahren betrachten.



Hauptklassen der Bibliothek

Die Bibliothek System.Net.Mail umfasst drei Hauptklassen:

  • SmtpClient — zuständig für die Verbindung zum SMTP-Server und den Versand von Nachrichten.
  • MailMessage — repräsentiert die E-Mail selbst: Betreff, Textkörper, Absender, Empfänger, Anhänge.
  • Attachment — ermöglicht das Hinzufügen von Dateien zur E-Mail.


Basisbeispiel für den E-Mail-Versand

Betrachten wir ein einfaches Szenario: Versenden einer Text-E-Mail über den Gmail-SMTP-Server. Beachten Sie, dass für die Arbeit mit Gmail aufgrund der Zwei-Faktor-Authentifizierung ein App-Passwort (App Password) erforderlich ist.

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

class Program{ static void Main() { var fromAddress = new MailAddress("your@gmail.com", "Ihr Name"); var toAddress = new MailAddress("recipient@example.com", "Empfänger"); const string fromPassword = "ihr_app_passwort"; const string subject = "Test-E-Mail aus .NET"; const string body = "Hallo! Diese E-Mail wurde mit C# gesendet.";

var smtp = new SmtpClient { Host = "smtp.gmail.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); }

Console.WriteLine("E-Mail gesendet!"); }}


Versand von HTML-E-Mails mit Anhängen

Häufig ist es erforderlich, eine E-Mail im HTML-Format mit angehängten Dateien zu senden. Setzen Sie dazu die Eigenschaft IsBodyHtml = true und verwenden Sie die Sammlung Attachments.

using (var message = new MailMessage(fromAddress, toAddress)){    message.Subject = "Monatsbericht";    message.IsBodyHtml = true;    message.Body = "<h2>Hallo!</h2><p>Ihr Bericht befindet sich im Anhang.</p>";

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

smtp.Send(message);}


Asynchroner Versand (async/await)

Für den nicht blockierenden Versand in modernen Anwendungen verwenden Sie SendMailAsync. Dies ist besonders wichtig in Webanwendungen (ASP.NET Core) und Desktop-Programmen mit Benutzeroberfläche.

public async Task SendEmailAsync(){    using (var message = new MailMessage(fromAddress, toAddress)    {        Subject = "Asynchroner Versand",        Body = "E-Mail wurde asynchron gesendet"    })    {        await smtp.SendMailAsync(message);    }}


Ausnahmebehandlung

Bei der Arbeit mit Mailservern können Fehler auftreten: falsche Anmeldedaten, Zeitüberschreitungen, DNS-Probleme. Umschließen Sie den Versand immer mit einem try-catch-Block.

try{    smtp.Send(message);    Console.WriteLine("Erfolgreich gesendet.");}catch (SmtpException ex){    Console.WriteLine($"SMTP-Fehler: {ex.StatusCode} - {ex.Message}");}catch (Exception ex){    Console.WriteLine($"Allgemeiner Fehler: {ex.Message}");                    

Empfehlungen