2010-10-19 13 views
5

Ich habe eine Konsolenanwendung, die erfordert, dass ich E-Mails sende. Im Moment benutze ich einen String-Builder, um die E-Mails zu erstellen, aber ich würde gerne mehr Phantasie haben. Dann dämmerte es mir: Es wäre nett, mein Objekt an eine ASP.NET MVC-Stilansicht zu senden, wo ich das HTML-Markup hätte, und es dann an Mail zurücksenden würde. Im Moment habe ich es so;ASP.NET MVC-Stilansichten in einer Konsolenanwendung erstellen?

private void MailJobList(List<Job> newJobs) { 
       var body = new System.Text.StringBuilder(); 
       var from = new MailAddress("[email protected]"); 
       var to = new MailAddress(addresslist.Get()); 

       var message = new MailMessage(from, to); 

       message.Subject = "New job list"; 

    //mail settings ommitted here for brevity 

       body.Append("New jobs: "); 
       if (newJobs.Any()) { 
        foreach (var newJob in newJobs) { 
         body.Append(newJob.Job + ", "); 
        } 
       } 

       message.Body = body.ToString(); 

       client.Send(message); 
} 

Offensichtlich das ist nur Klartext, aber ich würde wirklich in der Lage sein mag so etwas wie zu tun:

var body = RenderHTMLMessage(newJobs); 

Es scheint, wie ich in der Lage sollte ASP.NET MVC-Ansicht-Engine zu nutzen (oder Spark oder eine andere View-Engine) und nicht meine eigenen rollen. Wenn ich hier abwesend bin oder es einen einfacheren Weg gibt, bin ich offen für Vorschläge.

+0

Dies scheint eine verwandte (und sehr ähnliche) Frage zu sein: http://stackoverflow.com/questions/1730134/asp-net-mvc-email. – R0MANARMY

Antwort

3

Sie können die Spark View Engine als general purpose templating engine verwenden. Der Entwickler von Spark schrieb einen Blogpost darüber, wie man das machen könnte (wäre ein guter Anfang).

+0

Danke, ich kann nicht glauben, dass ich das vermisst habe. Spark ist 100% einfacher als Razor, um es als eigenständige Vorlagenlösung einzurichten und zu verwenden. Das mag sich in Zukunft ändern, aber das ist definitiv ausgereifter. –

0

Das Problem hier ist, dass ASP.NET MVC stark auf ASP.NET angewiesen ist und ASP.NET auf einem Webserver basiert .. Ich denke nicht, dass es machbar ist, wie Sie wollen. Sie können ASP.NET selbst hosten und Anfragen an sich selbst stellen.

2

Sie T4 templates verwenden können, die eine Syntax ähnlich wie asp.net haben, dies zu tun . Es erfordert jedoch die T4-Version, die mit VS2010 ausgeliefert wird. Here ist ein Beispiel und here ist msdn zum Thema

0

Die MVC-Infrastruktur wäre zu schwer für diese Aufgabe. es sei denn, Sie schreiben/hosten eine MVC-Anwendung zum Erstellen der Seiten, lesen Sie dann HTML direkt aus der URL vor dem E-Mail-Versand (dies könnte auch bedeuten, dass der Link (dies im Browser anzeigen) bereits erstellt wurde (wenn dies für newletters.

Für bestimmte E-Mails erstellen Sie HTML-Template-Dateien, die alle HTML- (und Inline-Styles, die von E-Mails benötigt werden) enthalten, dann liest das HTML ein und ersetzt die Token zB ## TO_NAME ## usw. Die Token oder Listen (ausgeschriebene Zeilen) sind hübsch spezifischer Code zu jedem sowieso.

Dies bedeutet, dass Sie die E-Mail-Vorlagen separatly auf den Code und ommit Inhalt von nicht Entfernen der Token von in der E-Mail-Vorlage ändern können.

zB:

<html> 
<body style="font-size:10px"> 
Dear ##To_NAME##< /br> 
</br> 
Your Jobs< /br> 
    <table> 
     <tr> 
     <td colspan="2">New Jobs<td> 
     </tr> 
     ##JOB_LIST## 
    <table> 
    ##FROM_NAME## 
</body> 
</html> 
+0

Der Hauptnachteil dieses Ansatzes ist, dass View-Engines bereits Konzepte wie Looping und Conditionals in die Syntax eingebaut haben . Sie können also eine Liste mit CLR-Objekten verknüpfen, die Jobauflistungen darstellen, und in Ihrer Ansicht angeben, welches Markup verwendet werden soll.Ihr Ansatz sieht so aus, als müssten Sie HTML-Markup im Code generieren, was eine ziemlich starke Kopplung zwischen dem Layout der E-Mail und dem Code, der zum Füllen der Daten verwendet wird, erzeugt. – R0MANARMY

+0

Ja, es erfordert die Generierung von etwas HTML, es ist nur eine verbesserte Version von dem, was das OP jetzt macht. –

0

Probieren Sie DotLiquid aus (www.dotliquidmarkup.org). Es ist eine Template-Engine, die in jeder Art von Anwendung mit einer einfachen Syntax verwendet werden kann.

Verwandte Themen