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}"); Auch in der Bibliothek
Dokka für Kotlin: Das komplette Tutorial mit Praxisbeispielen
Aufgabenwarteschlangen in Swift: GCD, OperationQueue und Swift Concurrency
Netty für Java: Vollständiges Tutorial mit Beispielen
Arbeiten mit S3 und Cloud-Speichern in C++: Die Bibliothek aws-sdk-cpp