98 votes

Puis-je mettre en place des Templates HTML/Email avec ASP.NET ?

Je travaille sur un site qui se chargera d'envoyer un nombre important d'e-mails. Je veux configurer l'en-tête et pied de page de texte, ou peut-être même des modèles pour permettre aux utilisateurs de modifier facilement ces e-mails si ils en ont besoin.

Si j'ai intégrer le code HTML à l'intérieur de C# littéraux de chaîne, c'est moche et qu'ils auraient à vous soucier de s'échapper. Y compris les fichiers plats pour l'en-tête et pied de page pourrait fonctionner, mais quelque chose ne fonctionne tout simplement pas.

Ce qui serait idéal, ce qui est d'utiliser un .ASPX page comme un modèle en quelque sorte, puis il suffit de dire à mon code pour servir à cette page et utilisez le code HTML retourné pour l'e-mail.

Est-il agréable et facile de faire cela? Est-il une meilleure façon d'aller sur la résolution de ce problème?

Mise à jour:
J'ai ajouté une réponse qui vous permet d'utiliser une norme .page aspx comme le modèle d'e-mail. Il suffit de remplacer toutes les variables comme vous le feriez normalement, l'utilisation de la liaison de données, etc. Puis il suffit de capturer la sortie de la page, et le tour est joué! Vous avez votre e-mail en HTML!

MIS À JOUR AVEC MISE EN GARDE!!!:
J'ai été en utilisant le MailDefinition classe sur certaines pages aspx très bien, mais lorsque j'essaie d'utiliser cette classe au cours d'un processus serveur qui a été en cours d'exécution, il a échoué. Je crois que c'était parce que le MailDefinition.CreateMailMessage() méthode qui nécessite un contrôle valide de référence, même si elle ne permet pas toujours de faire quelque chose. De ce fait, je recommande mon approche à l'aide d'une page aspx, ou Mun de l'approche à l'aide d'un ascx page, ce qui semble un peu mieux.

73voto

BarDev Points 3304

Il y a des tonnes de réponses déjà ici, mais je suis tombé sur un grand article sur la façon d'utiliser le Rasoir d'e-mails avec la création de modèles. Rasoir a été poussé avec ASP.NET MVC 3, mais MVC n'est pas nécessaire d'utiliser de Rasoir. C'est assez lisse traitement de faire des modèles d'e-mail

Comme l'article identifie, "La meilleure chose de Rasoir, c'est que contrairement à son prédécesseur(webforms) il n'est pas lié à l'environnement sur le web, on peut facilement accueillir en dehors du web et de l'utiliser comme moteur de template pour diverses fins. "

Utiliser Rasoir pour Modèle d'e-Mail en dehors ASP.NET MVC

55voto

Mun Points 6844

Vous pouvez également essayer de chargement d’un contrôle et en rendant ensuite en une chaîne et en définissant qui comme le corps HTML :

Vous pouvez alors créer votre email comme d’habitude :

Vous contrôle utilisateur pourrait contenir d’autres contrôles, tels qu’un en-tête et un pied de page et aussi tirer parti des fonctionnalités telles que la liaison de données.

35voto

Runscope API Tools Points 43859

Vous pouvez essayer la classe MailDefinition

17voto

Canavar Points 29161

Si vous voulez passer des paramètres comme les noms d'utilisateur, les noms de produits, ... etc. vous pouvez utiliser l'open source moteur de template NVelocity pour produire votre dernier courriel / HTML.

Un exemple de NVelocity modèle (MailTemplate.vm) :

A sample email template by <b>$name</b>.
<br />

Foreach example :
<br />    
#foreach ($item in $itemList)

[Date: $item.Date] Name: $item.Name, Value: $itemValue.Value
<br /><br />

#end

Générer le corps du mail par MailTemplate.vm dans votre application :

VelocityContext context = new VelocityContext();
context.Put("name", "ScarletGarden");
context.Put("itemList", itemList);

StringWriter writer = new StringWriter();

Velocity.MergeTemplate("MailTemplate.vm", context, writer);

string mailBody = writer.GetStringBuilder().ToString();

Le résultat le corps du mail est :

Un exemple de modèle d'e-mail par ScarletGarden.

Foreach exemple :

[Date: 12.02.2009] Nom: Poste 1, Valeur: 09

[Date: 21.02.2009] Nom: Point 4, Valeur: 52

[Date: 01.03.2009] Nom: Article 2, Valeur: 21

[Date: 23.03.2009] Nom: Point 6, Valeur: 24

Pour l'édition des templates, peut-être que vous pouvez utiliser FCKEditor et enregistrer vos modèles de fichiers.

6voto

Everton Points 153

Si la flexibilité est l'un de vos conditions préalables, XSLT peut être un bon choix, ce qui est complètement pris en charge par .NET framework et vous seriez en mesure à même de permettre à l'utilisateur de modifier ces fichiers. Cet article (http://www.aspfree.com/c/a/XML/XSL-Transformations-using-ASP-NET/) pourrait être utile pour un début (msdn a plus d'infos à ce sujet). Comme dit par ScarletGarden NVelocity est un autre bon choix, mais je ne préfère XSLT pour ses "built-in" .NET framework prise en charge et la plate-forme agnostique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X