Gibt es eine bessere Möglichkeit, HTML-E-Mails in C # zu generieren (zum Senden über System.Net.Mail), als einen Stringbuilder zu verwenden, um Folgendes zu tun:
string userName = "John Doe";
StringBuilder mailBody = new StringBuilder();
mailBody.AppendFormat("<h1>Heading Here</h1>");
mailBody.AppendFormat("Dear {0}," userName);
mailBody.AppendFormat("<br />");
mailBody.AppendFormat("<p>First part of the email body goes here</p>");
und so weiter und so fort?
Antworten:
Sie können die MailDefinition-Klasse verwenden .
So verwenden Sie es:
Außerdem habe ich einen Blog-Beitrag darüber geschrieben, wie HTML-E-Mail-Text in C # mithilfe von Vorlagen mithilfe der MailDefinition-Klasse generiert wird .
quelle
Regex.Replace(body, pattern, replacement, RegexOptions.IgnoreCase);
für jedes Schlüssel / Wert-Paar ausgeführt wird ... Angesichts dieses Details bietet diese Klasse nicht viel Wert, wie oben verwendet es sei denn, Sie arbeiten mit einem vorhandenen Verweis aufSystem.Web.UI.Controls
.Verwenden Sie die System.Web.UI.HtmlTextWriter-Klasse.
Für umfangreiches HTML, das die Erstellung von Stilattributen umfasst, ist HtmlTextWriter wahrscheinlich der beste Weg. Die Verwendung kann jedoch etwas umständlich sein, und einige Entwickler möchten, dass das Markup selbst leicht zu lesen ist, aber pervers ist die Auswahl von HtmlTextWriter in Bezug auf Einrückungen etwas seltsam.
In diesem Beispiel können Sie XmlTextWriter auch sehr effektiv verwenden: -
quelle
h1
Tag Inline-Styling hinzufügen ?Aktualisierte Antwort :
Die Dokumentation für
SmtpClient
die in dieser Antwort verwendete Klasse lautet nun: 'Veraltet ("SmtpClient und sein Netzwerk von Typen sind schlecht gestaltet. Wir empfehlen dringend, https://github.com/jstedfast/MailKit und https: // github zu verwenden .com / jstedfast / MimeKit stattdessen ") '.Quelle: https://www.infoq.com/news/2017/04/MailKit-MimeKit-Official
Ursprüngliche Antwort :
Die Verwendung der MailDefinition-Klasse ist der falsche Ansatz. Ja, es ist praktisch, aber es ist auch primitiv und hängt von den Steuerelementen der Web-Benutzeroberfläche ab. Dies ist für etwas, das normalerweise eine serverseitige Aufgabe ist, nicht sinnvoll.
Der unten dargestellte Ansatz basiert auf der MSDN-Dokumentation und dem Beitrag von Qureshi auf CodeProject.com .
ANMERKUNG: In diesem Beispiel werden HTML-Dateien, Bilder und Anhänge aus eingebetteten Ressourcen extrahiert. Die Verwendung anderer Alternativen zum Abrufen von Streams für diese Elemente ist jedoch in Ordnung, z. B. fest codierte Zeichenfolgen, lokale Dateien usw.
quelle
Ich benutze dotLiquid für genau diese Aufgabe.
Es nimmt eine Vorlage und füllt spezielle Bezeichner mit dem Inhalt eines anonymen Objekts.
Es funktioniert auch mit Sammlungen, siehe einige Online-Beispiele .
quelle
Ich würde empfehlen, Vorlagen zu verwenden. Es gibt verschiedene Möglichkeiten, dies zu erreichen, aber im Wesentlichen eine Vorlage der E-Mail an einer bestimmten Stelle (auf der Festplatte, in einer Datenbank usw.) zu halten und einfach die Schlüsseldaten (IE: Name des Empfängers usw.) in die Vorlage einzufügen.
Dies ist weitaus flexibler, da Sie die Vorlage nach Bedarf ändern können, ohne Ihren Code ändern zu müssen. Nach meiner Erfahrung erhalten Sie wahrscheinlich Anfragen nach Änderungen an den Vorlagen von Endbenutzern. Wenn Sie das ganze Schwein gehen möchten, können Sie einen Vorlageneditor hinzufügen.
quelle
Schauen Sie sich als Alternative zu MailDefinition RazorEngine https://github.com/Antaris/RazorEngine an .
Dies scheint eine bessere Lösung zu sein.
Zugeschrieben an ...
wie man eine E-Mail mit einer E-Mail-Vorlage sendet c #
Z.B
Welche Ausgänge ...
quelle
Das Ausgeben von handgefertigtem HTML wie diesem ist wahrscheinlich der beste Weg, solange das Markup nicht zu kompliziert ist. Der Stringbuilder zahlt sich erst nach etwa drei Verkettungen in Bezug auf die Effizienz aus, sodass für wirklich einfache Dinge String + String ausreichen.
Ansonsten können Sie die HTML-Steuerelemente (System.Web.UI.HtmlControls) verwenden und rendern. Auf diese Weise können Sie sie manchmal erben und Ihre eigene Klasse für ein komplexes bedingtes Layout erstellen.
quelle
Vielleicht möchten Sie einen Blick auf einige der derzeit verfügbaren Vorlagen-Frameworks werfen. Einige von ihnen sind Spin-offs aufgrund von MVC, aber das ist nicht erforderlich. Spark ist gut.
quelle
Wenn Sie keine Abhängigkeit vom vollständigen .NET Framework wünschen, gibt es auch eine Bibliothek, mit der Ihr Code wie folgt aussieht:
Es ist Open Source und kann von http://sourceforge.net/projects/htmlplusplus/ heruntergeladen werden.
Haftungsausschluss: Ich bin der Autor dieser Bibliothek. Sie wurde geschrieben, um das gleiche Problem genau zu lösen - senden Sie eine HTML-E-Mail von einer Anwendung.
quelle
Eine kommerzielle Version, die ich in der Produktion verwende und die eine einfache Wartung ermöglicht, ist die LimiLabs Template Engine , die sie seit mehr als 3 Jahren verwendet und es mir ermöglicht, Änderungen an der Textvorlage vorzunehmen, ohne den Code aktualisieren zu müssen (Haftungsausschlüsse, Links usw.) könnte so einfach sein wie
Es lohnt sich, einen Blick darauf zu werfen, wie ich es getan habe; nach dem Versuch verschiedene Antworten hier erwähnt.
quelle