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 senden möchten, HTML-E-Mails oder Massenmails bearbeiten, FluentEmail bietet eine einfache Möglichkeit, E-Mail-Sende-Funktionalität 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 verwendet Tim um 3:50 die Paket-Manager-Konsole, um das Package FluentEmail.Smtp zu installieren, wodurch die Nutzung eines SMTP-Clients zum Senden von E-Mails in C# ermöglicht wird. 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
SHELL

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 diskutiert Tim die Einrichtung des SMTP-Clients unter Verwendung 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 sich mit Ihrem echten SMTP-Server verbinden, z.B. dem SMTP-Endpunkt von Gmail, möglicherweise unter Verwendung eines App-Passworts für mehr 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 während die E-Mail scheinbar von tim@timco.com stammt, der SMTP-Server es auf Basis der Anmeldeinformationen authentifizieren wird (ähnlich einem Gmail App-Passwort).

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 SMTP-Client-Einstellungen zu:

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
SHELL

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 verschiedene Formate wie einfachen Text und HTML-Body, abhängig vom Vorlageninhalt.

Behandlung von mehreren Empfängern und Anhängen

Obwohl nicht ausführlich in Tims Demo behandelt, unterstützt FluentEmail problemlos mehrere Empfänger über .To()-Aufrufe und das Hinzufügen eines Anhangsobjekts für Dateianhänge, ähnlich dem Arbeiten mit dem MailMessage-Objekt oder der MailMessage-Klasse in früheren .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);
}

Dies erfasst alle SMTP- oder netzwerkbezogenen Fehler während des E-Mail-Versendeprozesses, insbesondere wenn SMTP-Probleme auftreten.

Zusammenfassung und Schlussgedanken

Um 27:56 stellt Tim fest, dass mit FluentEmail das Senden von E-Mails in C# unkompliziert wird - von einfachen Nachrichten im Hallo-Welt-Stil bis hin zu professionellen, dynamischen HTML-E-Mails.

Er betont auch die Bedeutung, die Details und Konfigurationen Ihres SMTP-Servers flexibel zu halten und eine Konfigurationsdatei wie appsettings.json zu verwenden, besonders bei der Migration 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 Tim Coreys ausgezeichnetem Video geht hervor, dass die moderne E-Mail-Sendefunktionalität in C# über die grundlegende Behandlung der SmtpClient-Klasse und der MailMessage-Klasse hinausgewachsen ist. 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