La génération de code HTML email en C#
Est-il une meilleure façon de générer des e-mails HTML en C# (pour l'envoi via le Système.Net.Mail), à l'aide d'un Stringbuilder pour effectuer les opérations suivantes:
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>");
et ainsi de suite, et ainsi de suite?
- Eh bien, cela dépend vraiment de la solution que je le vois. J'ai tout fait à partir de l'accaparement de l'entrée utilisateur et la mise en forme automatiquement à partir des comportements différents. La meilleure solution que j'ai fait avec les mails html a été effectivement xml+xslt, mise en forme, puisque nous savions que l'entrée du mail initial.
- Cela dépend de la complexité de vos exigences. Une fois, j'ai eu une demande qui a rendu une table dans un e-mail HTML et j'ai utilisé un ASP.NET Gridview pour afficher le code HTML - de la concaténation de chaînes de générer un tableau aurait été en désordre.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le MailDefinition classe.
C'est la façon dont vous l'utiliser:
Aussi, j'ai écrit un blog sur comment générer le code HTML de l'e-mail du corps en C# à l'aide de modèles à l'aide de la MailDefinition classe.
Regex.Replace(body, pattern, replacement, RegexOptions.IgnoreCase);
pour chaque paire clé/valeur ... à la lumière de ce détail, cette classe ne fournit pas beaucoup de valeur utilisé ci-dessus, à moins de travailler avec une référence àSystem.Web.UI.Controls
.@$"<div>{someValue}</div>"
? J'avais effectivement penser que votre code est moins lisible que de traiter directement avec les chaînesUtiliser le Système.Web.L'INTERFACE utilisateur.Classe HtmlTextWriter.
Pour une vaste HTML qui comprend la création d'attributs de style HtmlTextWriter est probablement la meilleure façon d'aller. Toutefois, il peut être un peu maladroit d'utiliser et de certains développeurs, comme l'annotation elle-même est facile à lire mais perversly HtmlTextWriter du choix en ce qui concerne l'indentation est un peu bizarre.
Dans cet exemple, vous pouvez également utiliser XmlTextWriter tout à fait efficace:-
h1
tag?Mise À Jour De Réponse:
La documentation pour
SmtpClient
, la classe utilisée dans cette réponse, lit maintenant, " Obsolète("SmtpClient et de son réseau de types sont mal conçus, nous vous recommandons vivement d'utiliser https://github.com/jstedfast/MailKit et https://github.com/jstedfast/MimeKit à la place")'.Source: https://www.infoq.com/news/2017/04/MailKit-MimeKit-Official
Réponse Originale À Cette Question:
À l'aide de la MailDefinition classe est la mauvaise approche. Oui, c'est pratique, mais c'est aussi primitif et dépend de l'INTERFACE web des commandes--qui n'a pas de sens pour quelque chose qui est généralement une tâche de côté serveur.
L'approche présentée ci-dessous est basé sur la documentation MSDN et Qureshi post sur CodeProject.com.
REMARQUE: Cet exemple extrait le fichier HTML, des images et des pièces jointes à partir de ressources intégrées, mais en utilisant d'autres solutions de rechange pour obtenir les flux de ces éléments sont très bien, par exemple, les chaînes codées en dur, des fichiers locaux, et ainsi de suite.
Dispose()
? Pourquoi ne pas simplementusing
des blocs? Alors que je suis convaincu que cette travaux il ressemble à un cauchemar si vous devez la modifier. Peut-être juste style de codage... je crois que je préfère écrire des modèles de courrier électronique à l'aide de quelque chose qui s'appelleMailDefinition
, même avec les malheureux de la dépendance aux contrôles web.Je conseille à l'aide de modèles d'une certaine sorte. Il existe différentes façons de procéder, mais essentiellement de tenir un modèle de l'e-Mail où (sur le disque, dans une base de données, etc) et il suffit d'insérer les données de la clé (c'est à dire: nom des Destinataires etc) dans le modèle.
C'est beaucoup plus flexible, car elle signifie que vous pouvez modifier le modèle sans avoir à modifier le code. Dans mon expérience, vos chances d'obtenir les demandes de modifications aux modèles des utilisateurs finaux. Si vous voulez aller jusqu'au bout vous pourriez inclure un éditeur de modèle.
- Je utiliser dotLiquid exactement pour cette tâche.
Il faut un modèle, et remplit spécial identificateurs avec le contenu d'un objet anonyme.
Il travaille également avec des collections, voir quelques exemples en ligne.
Émettant handbuilt html comme ceci est probablement la meilleure façon tant que le balisage n'est pas trop compliqué. Le stringbuilder commence seulement à vous rembourser en termes d'efficacité après environ trois précédents, donc pour des trucs vraiment simples chaîne + chaîne va faire.
D'autres que vous pouvez commencer à utiliser les contrôles html (le Système.Web.L'INTERFACE utilisateur.HtmlControls) et de les rendre, de cette façon, vous pouvez parfois hériter et de faire votre propre clasess complexes conditionnelle de mise en page.
Comme une alternative à MailDefinition, jetez un oeil à RazorEngine https://github.com/Antaris/RazorEngine.
Cela ressemble à une meilleure solution.
Attributted à...
comment envoyer un email avec modèle d'e-mail c#
E. g
Sorties...
Vous pourriez vouloir jeter un oeil à quelques de la le modèle des cadres qui sont disponibles pour l'instant. Certains d'entre eux sont des spin off comme un résultat de MVC, mais qui ne sont pas nécessaires. Spark est un bon.
Si vous ne voulez pas une dépendance sur le plein .NET Framework, il y a aussi une bibliothèque qui rend votre code ressemble:
Il est open source, vous pouvez le télécharger à partir http://sourceforge.net/projects/htmlplusplus/
Disclaimer: je suis l'auteur de cette bibliothèque, il a été écrit pour résoudre le même problème exactement - envoyer un e-mail HTML à partir d'une application.