2010-02-19 10 views
3

Je suis sur le point d'écrire un simple gestionnaire de courriel pour le site sur lequel je travaille (asp.net/c#); le site envoie divers courriels, comme la création d'un compte, des nouvelles, certaines actions de l'utilisateur, etc. Il y aura donc des modèles d'email avec des espaces réservés comme [$ FirstName] qui seront remplacés par des valeurs réelles. Trucs assez standard. Je me demande juste si quelqu'un peut conseiller sur le code existant - encore une fois, j'ai besoin de quelque chose de très simple, sans beaucoup de cloches/sifflets, et évidemment avec code source (et gratuit)Email templating engine

Toutes les idées/commentaires seront très appréciés!

Merci, Andrey

+0

Certains tests avec RazorEngin, guidons et SharpTal: http://stackoverflow.com/questions/340095/can-you-recommend-a-net -template-engine/33546901 # 33546901 – Nigrimmist

Répondre

5

Il ya déjà plusieurs threads sur Stack Overflow, mais j'ai fini par lancer ma propre solution à partir de diverses suggestions. J'ai utilisé cette méthode d'extension FormatWith pour prendre soin de la modélisation simple, puis j'ai créé une classe de base Email de base pour prendre en charge des tâches courantes, comme l'insertion d'un modèle approprié et le remplacement de toutes les informations requises, ainsi que la fourniture une méthode Send(). Tous les emails que j'ai besoin d'envoyer ont leur propre sous-classe dérivant de la base, et définissent des choses qui leur sont propres, comme TemplateText, BindingData, Recipients, et Subject. Les avoir chacun dans leur propre classe les rend très facile à tester unitairement du reste de l'application. Pour que votre application puisse fonctionner avec ces classes d'email sans vraiment se soucier de celle qu'elle utilise, c'est aussi une bonne idée d'implémenter une interface, avec toutes les méthodes partagées (la seule qui m'intéressait était Send()), donc alors votre application peut instancier n'importe quelle classe d'email et travailler avec eux de la même manière. Peut-être que les génériques pourraient aussi être utilisés, mais c'est ce que j'ai trouvé.

IEmail email = new MyEmailClass(); 
email.Send(); 

Edit: Il y a beaucoup d'autres suggestions ici: Can I set up HTML/Email Templates with ASP.NET?

0

Si vous utilisez ASP.NET, vous déjà ont un moteur de templating à votre disposition. Créez simplement une page ASP.NET qui produira les résultats pour vous (en utilisant les contrôles, etc, etc) que vous voulez, ainsi que la définition du ContentType de la réponse au type approprié (texte ou HTML, selon le format de courriel)

Assurez-vous que que cette URL est pas publiquement exposée. Puis, dans votre code, vous créerez une requête HttpWebRequest/HttpWebResponse ou WebClient, puis récupérerez l'URL et récupérerez le contenu. Le moteur ASP.NET traitera la demande et retournera vos résultats formatés, que vous pourrez ensuite envoyer par courrier électronique.

Si vous voulez quelque chose de plus simple, pourquoi ne pas utiliser un RegEx et faire correspondre? Assurez-vous simplement d'avoir un identificateur assez unique pour vos champs (préfixe et suffixe, dont vous pouvez garantir qu'ils ne seront jamais utilisés, ou vous pouvez au moins écrire une séquence d'échappement) et vous pourriez facilement utiliser la méthode Match pour faire le remplacer. Le seul "gotcha" à l'approche RegEx est que si vous devez faire du template intégré, cela va demander un peu plus de travail.

+3

Cela semble être le mauvais outil pour le travail pour moi et vous rencontrerez beaucoup de problèmes depuis Outlook ne rend pas ce que le framework .NET considère HTML standard. Et vous devez exécuter un cycle de page entier pour ce qui pourrait être réalisé avec beaucoup moins de code. – Hogan

0

Je viens de le faire moi-même, il y a quelques bonnes informations à: Sending Email Both in HTML and Plain Text. La meilleure partie est, vous n'avez besoin de rien d'autre que .NET. Fondamentalement, vous créez une page HTML (AKA, votre e-mail formaté) avec les tags que vous souhaitez remplacer (dans le cas de cette solution, les tags seront au format: <% TAGNAME%>) . Vous utilisez ensuite l'information trouvée sur le site Web ci-dessus pour créer un modèle de courrier avec les étiquettes remplies avec les données appropriées, et les injections seront faites pour vous dans votre modèle HTML. Ensuite, vous utilisez simplement les classes SMTP intégrées dans .NET et envoyez le courrier sur son chemin. C'est très simple et direct. Informez-moi si vous avez d'autres questions. J'espère que cela pourra aider!

1

Je fais toujours ce qui suit. Modèles = chaîne de texte avec {#} espaces réservés. Pour utiliser un modèle, je charge la chaîne (à partir de n'importe quel magasin), puis appelez string.Format(template,param1,param2..)

Simple et fonctionne bien. Lorsque vous avez besoin de quelque chose de plus fort, vous pouvez passer à un cadre quelconque, mais string.format a toujours bien fonctionné pour moi.

Note

lien Alison R prend cette méthode à l'étape suivante en utilisant des types anonymes de 3,5 à grand effet. Si vous êtes 3,5 je recommande d'utiliser le FormatWith là (je le ferai) sinon cette façon fonctionne bien.

+0

Bien que cela puisse être simple, il ne sépare pas le contenu et la présentation. Et, puisque les e-mails sont utilisés, pourquoi ne pas utiliser ce que le framework .NET a déjà intégré? – JasCav

+1

Vous ne savez pas ce que vous dites ... les {0} sont le contenu et le modèle est la présentation. – Hogan