Tags: , | Posted by AlexanderZeitler on 11/28/2010 5:07 PM | Comments (0)

Ein Thema, mit dem überwiegend Web-Entwickler immer wieder konfrontiert werden, ist das Implementieren einer Mail-Template-Engine, d.h. das Parsen von Text-Vorlagen, aus denen individualisierte EMails für den Versand vorbereitet werden – der Klassiker sind Newsletter.

Ebenso häufig, wie das Thema auftaucht, ebenso leidig war die Implementierung bisher.

Mit der parallel zu ASP.NET MVC 3 vorgestellten ViewEngine “Razor”, ist es nun um einiges leichter geworden, solche Template-Engines – z.B. für Mail-Templating – zu entwickeln.

Eine solche, bereits auf Razor basierende Templating-Engine ist die Razor Templating Engine, die hier von CodePlex heruntergeladen werden kann.

Die Verwendung ist denkbar einfach:

Console.Write("Name: ");
string name =Console.ReadLine();

MailMessage simpleHelloWorldMail = 
	new MailMessage("alex@alexonasp.net", "alex@alexonasp.net");
string mailTemplate = "Hello @Model.Name! Welcome to Razor!";
			
string body = Razor.Parse(mailTemplate, new { Name = name });
simpleHelloWorldMail.Body = body;
			
sendMail(simpleHelloWorldMail);
Console.ReadLine();

Auch die Erstellung von HTML-Templates ist möglich:

MailMessage htmlHelloWorldMail =
	new MailMessage("alex@alexonasp.net", "alex@alexonasp.net");

htmlHelloWorldMail.IsBodyHtml = true;
Razor.SetTemplateBaseType(typeof(HtmlTemplateBase<>));

string htmlTemplate = 
	@"<html>
		<head>
			<style type=\""text/css\"">
				body { font-family: Arial; }
			</style>
		</head>
		<body>
			<h1>Hello @Model.Name</h1>
			<p>Welcome to Razor Templating...</p>
		</body>
	</html>";

var model = new { Name = name };

string htmlBody = Razor.Parse(htmlTemplate, model);
htmlHelloWorldMail.Body = htmlBody;

sendMail(htmlHelloWorldMail);

Das Resultat der HTML-Mail:

HTML-Mail

Die Razor Templating Engine ist auch per

Install-Package RazorEngine

via NuGet verfügbar.

Voraussetzung ist .NET Framework 4.0.

Die Beispiel-Solution kann hier heruntergeladen werden:

RazorMailTemplating.zip (91.07 kb)

DotNetKicks-DE Image
Comments are closed