Zum Fußzeileninhalt springen
Iron Academy Logo
Lernen Sie C#
Lernen Sie C#

Andere Kategorien

E-Mail-Versand in C# mit FluentEmail

Tim Corey
30m 36s

Das Versenden von Transaktions-E-Mails in C# ist eine häufige Anforderung in vielen Unternehmenssoftwarelösungen. Wie Tim Corey in seinem Video "E-Mail-Versand in C# mit FluentEmail" erklärt, muss dieser Prozess jedoch nicht schwierig sein. Egal, ob Sie einfache Textnachrichten, HTML-E-Mails oder Massen-E-Mails versenden möchten, FluentEmail bietet eine einfache Möglichkeit, E-Mail-Versandfunktionen mit modernen Methoden und SMTP-Protokollen zu implementieren.

In diesem Artikel gehen wir den Prozess anhand des Videos von Tim Corey durch, um vollständig zu lernen, wie man E-Mails in C# mit FluentEmail versendet, einen SMTP-Server einrichtet, dynamische HTML-E-Mail-Nachrichten erstellt und den gesamten E-Mail-Versandprozess effektiv testet.

Einführung in FluentEmail

Tim beginnt mit einer Erläuterung des Hintergrunds: Das Versenden von E-Mails in C# basierte früher auf älteren Tools wie System.Net.Mail, aber mit .NET 5 und späteren Versionen wurde ein Großteil dieser Tools veraltet. An dieser Stelle kommt FluentEmail, eine moderne E-Mail-Bibliothek, ins Spiel, um die Lücke sowohl für einfache Nachrichten als auch für anspruchsvollere Kommunikation wie HTML-E-Mails und Inline-Bilder zu schließen.

Tim weist darauf hin, dass das Ziel darin besteht, auf einfache Weise E-Mails zu erstellen, Vorlagen zu verwenden und sie sogar zu testen, ohne eine Verbindung zu Produktionsservern herzustellen.

Einrichten der Konsolenanwendung

Bei 1:04 erstellt Tim eine neue Konsolenanwendung namens EmailDemoApp. Er betont, wie einfach es ist, mit static void Main(string[] args) oder einfach public static void Main zu beginnen, wenn Sie keine Benutzeroberfläche benötigen. Der saubere Ausgangspunkt ermöglicht es, sich ausschließlich auf den E-Mail-Versandprozess zu konzentrieren.

Send Emails In Csharp Using Fluentemail 1 related to Einrichten der Konsolenanwendung

Nach der Erstellung der App richtet Tim das Projekt auf .NET 5 aus, ein modernes Upgrade des traditionellen .NET Framework, das eine bessere Kompatibilität mit modernen Protokollen für E-Mail-Clients gewährleistet.

Installation von FluentEmail über die Paketmanager-Konsole

Als Nächstes, bei 3:50, verwendet Tim die Paketverwaltungskonsole, um das Paket FluentEmail.Smtp zu installieren, das die Verwendung eines Smtp-Clients zum Senden von E-Mails in C# ermöglicht. Daneben erwähnt Tim, dass es zusätzliche Integrationen wie MailGun und SendGrid gibt, aber SMTP ist die universellste Option, die mit den meisten E-Mail-Clients und -Einrichtungen funktioniert.

Send Emails In Csharp Using Fluentemail 2 related to Installation von FluentEmail über die Paketmanager-Konsole

Mit dem folgenden Befehl können Sie es manuell installieren:

Install-Package FluentEmail.Smtp
Install-Package FluentEmail.Smtp

Tim stellt sicher, dass wir auch die FluentEmail.Core-Abhängigkeit hinzufügen, die für das Funktionieren der Bibliothek erforderlich ist.

Konfiguration des SMTP-Clients und -Servers

Um 6:10 Uhr bespricht Tim die Einrichtung des smtp-Clients mithilfe einer neuen smtpclient-Konfiguration:

var sender = new SmtpSender(() => new SmtpClient("localhost")
{
    EnableSsl = false,
    DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory,
    PickupDirectoryLocation = @"C:\Demos"
});
var sender = new SmtpSender(() => new SmtpClient("localhost")
{
    EnableSsl = false,
    DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory,
    PickupDirectoryLocation = @"C:\Demos"
});

Tim betont, dass dieser smtp-Server localhost für lokale Tests gedacht ist. In der Produktion würden Sie eine Verbindung zu den Details Ihres echten SMTP-Servers herstellen, z. B. zum SMTP-Endpunkt von Google Mail, möglicherweise unter Verwendung eines App-Passworts zur Sicherheit.

Er betont, dass sensible Einstellungen in eine Konfigurationsdatei wie appsettings.json verschoben werden sollten, um die Sicherheit und Flexibilität zu erhöhen.

Eine einfache E-Mail-Nachricht versenden

Um 11:59 Uhr geht Tim zum Senden einer einfachen Nachricht mit der E-Mail-API von FluentEmail über. Er erklärt, dass ein var E-Mail-Objekt mit dem folgenden Codebeispiel erstellt wird:

var email = await Email
    .From("tim@timco.com")
    .To("test@test.com", "Sue")
    .Subject("Thanks")
    .Body("Thanks for buying our product.")
    .SendAsync();
var email = await Email
    .From("tim@timco.com")
    .To("test@test.com", "Sue")
    .Subject("Thanks")
    .Body("Thanks for buying our product.")
    .SendAsync();

Auf diese Weise geben Sie den String Betreff, den String E-Mail und den Nachrichtentext mithilfe der Methodenverkettung eindeutig an. Die var-Nachricht (E-Mail) enthält das Ergebnis und ermöglicht eine Fehlerprüfung.

Tim weist darauf hin, dass die E-Mail zwar von tim@timco.com zu stammen scheint, der Smtp-Server sie aber dennoch anhand der Anmeldedaten (z. B. dem Passwort für die Google Mail-App) authentifiziert.

E-Mails mit lokalem Verzeichnis anzeigen

Sobald die E-Mail-Nachricht versendet wurde, zeigt Tim, wie sie als .eml-Datei im lokalen Ordner erscheint. Obwohl man sie mit Outlook oder Notepad öffnen kann, ist sie für bestehende E-Mail-Nachrichten oder Massentests nicht besonders benutzerfreundlich.

Send Emails In Csharp Using Fluentemail 3 related to E-Mails mit lokalem Verzeichnis anzeigen

Verwendung von Papercut SMTP für einfacheres Testen

Bei 17:03 wechselt Tim vom Speichern in einem Verzeichnis zur Verwendung von Papercut SMTP, einem leichtgewichtigen gefälschten SMTP-Server.

Er ändert die Einstellungen des smtp-Clients, um:

DeliveryMethod = SmtpDeliveryMethod.Network;
Port = 25;
DeliveryMethod = SmtpDeliveryMethod.Network;
Port = 25;

Mit Papercut wird jede Test-E-Mail sofort in einer grafischen Benutzeroberfläche angezeigt. Dies erleichtert die Überprüfung von Text- und HTML-Inhalten und simuliert, wie echte E-Mail-Clients die verschiedenen Formate darstellen.

Send Emails In Csharp Using Fluentemail 4 related to Verwendung von Papercut SMTP für einfacheres Testen

Erstellung einer HTML-E-Mail mit Razor-Vorlagen

Bei 19:12 merkt Tim an, dass statischer reiner Text für viele reale Fälle nicht ausreicht. Für dynamischere, reichhaltige HTML-Nachrichten installiert er das Paket FluentEmail.Razor:

Install-Package FluentEmail.Razor
Install-Package FluentEmail.Razor

Er aktualisiert die Projekteinstellungen mit:

<PreserveCompilationContext>true</PreserveCompilationContext>
<PreserveCompilationContext>true</PreserveCompilationContext>

um sicherzustellen, dass Razor-Vorlagen richtig kompiliert werden.

Erstellung und Verwendung einer Razor-E-Mail-Vorlage

Mithilfe eines String-Builders (var builder) und der Razor-Syntax erstellt Tim eine dynamische E-Mail-Vorlage:

var builder = new StringBuilder();
builder.AppendLine("Dear @Model.FirstName,");
builder.AppendLine("<p>Thanks for purchasing @Model.ProductName.</p>");
builder.AppendLine("The TimCo Team");
var builder = new StringBuilder();
builder.AppendLine("Dear @Model.FirstName,");
builder.AppendLine("<p>Thanks for purchasing @Model.ProductName.</p>");
builder.AppendLine("The TimCo Team");

Anschließend fügt er diese Vorlage mit folgendem Code an die var-Anfrage an:

await Email
    .UsingTemplate(builder.ToString(), new { FirstName = "Tim", ProductName = "Bacon Wrapped Bacon" })
    .SendAsync();
await Email
    .UsingTemplate(builder.ToString(), new { FirstName = "Tim", ProductName = "Bacon Wrapped Bacon" })
    .SendAsync();

Diese Technik unterstützt je nach Inhalt der Vorlage verschiedene Formate wie einfachen Text und HTML-Text.

Behandlung von mehreren Empfängern und Anhängen

Obwohl in Tims Demo nicht vollständig beschrieben, unterstützt FluentEmail problemlos mehrere Empfänger über To()-Aufrufe und das Hinzufügen eines Attachment-Objekts für Dateianhänge, ähnlich wie das Mailmessage-Objekt oder die Mailmessage-Klasse in älteren .NET-Versionen.

Sie können Anhänge mit einem neuen String-Dateipfad oder einer Inhalts-ID für Inline-Bilder erstellen.

Ausnahmebehandlung im E-Mail-Versandprozess

Tim weist darauf hin, dass Sie mit Fehlern angemessen umgehen sollten. Zum Beispiel:

try
{
    var result = await Email.SendAsync();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}
try
{
    var result = await Email.SendAsync();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

Damit werden alle SMTP- oder netzwerkbezogenen Fehler während des E-Mail-Versands erfasst, insbesondere wenn Probleme mit dem SMTP-Protokoll auftreten.

Zusammenfassung und Schlussgedanken

Bei ca. 27:56 kommt Tim zu dem Schluss, dass mit FluentEmail das Versenden von E-Mails in C# ganz einfach wird - vom Versenden einfacher Nachrichten im Stil von Hallo Welt bis hin zu professionellen, dynamischen HTML-E-Mails.

Er betont auch, wie wichtig es ist, die Details und Konfigurationen des Smtp-Servers mithilfe einer Konfigurationsdatei wie appsettings.json flexibel zu halten, insbesondere beim Wechsel zwischen lokaler Entwicklung und Cloud-Plattformen wie Azure Portal.

Unabhängig davon, ob Sie einzelne E-Mails oder Massen-E-Mails versenden möchten, bietet FluentEmail in Kombination mit Papercut SMTP einen modernen, effizienten Arbeitsablauf, der mit vielen Programmiersprachen und Ökosystemen kompatibel ist.

Abschließende Überlegungen

Dank des ausgezeichneten Videos von Tim Corey ist klar, dass sich die moderne E-Mail-Versandfunktionalität in C# über die grundlegende Handhabung der Klassen smtpclient und mailmessage hinaus entwickelt hat. Mit Hilfe von FluentEmail können Entwickler schnell ein neues Projekt erstellen, eine SMTP-Verbindung konfigurieren, einen dynamischen E-Mail-Text erstellen und alles lokal testen, bevor es in der Produktion eingesetzt wird.

Hero Worlddot related to E-Mail-Versand in C# mit FluentEmail
Hero Affiliate related to E-Mail-Versand in C# mit FluentEmail

Verdienen Sie mehr, indem Sie teilen, was Sie lieben

Erstellen Sie Inhalte für Entwickler, die mit .NET, C#, Java, Python oder Node.js arbeiten? Verwandeln Sie Ihr Fachwissen in ein zusätzliches Einkommen!

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an