2010-10-19 37 views
5

我有一個控制檯應用程序,需要我發送電子郵件。現在我使用字符串生成器來創建電子郵件,但我想要更多的花哨。然後,我明白了:將對象發送到ASP.NET MVC樣式視圖,在那裏我將擁有HTML標記,然後將其返回給郵件發送。現在,我已經這樣了;在控制檯應用程序中創建ASP.NET MVC樣式視圖?

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); 
} 

顯然,這只是普通的文本,但我真的希望能夠做一些事情,如:

var body = RenderHTMLMessage(newJobs); 

好像我應該能夠利用ASP.NET MVC的視圖引擎(或者Spark或者任何其他的視圖引擎)並且不會自己推出。如果我不在這裏或者有任何更簡單的方法來做到這一點,我願意接受建議。

+0

這似乎是一個相關(和非常相似)的問題:http://stackoverflow.com/questions/1730134/asp-net-mvc-email。 – R0MANARMY 2010-10-19 16:51:03

回答

3

可以使用Spark View Engine作爲general purpose templating engine。 Spark的創造者寫了一篇關於如何去做這件事的博文(這將是一個好的開始)。

+0

謝謝,我不能相信我錯過了。 Spark看起來比Razor更容易設置和使用作爲獨立的模板解決方案。這可能會在未來發生變化,但這絕對是比較成熟的。 – 2010-10-20 18:07:53

0

這裏的問題是,ASP.NET MVC嚴重依賴於ASP.NET,ASP.NET依賴於Web服務器..我不認爲這是可行的方式,你想。你可以做的是自己託管ASP.NET,並假冒你自己的請求。

2

您可以使用T4 templates,它具有類似於asp.net語法,要做到這一點。不過,它需要VS2010附帶的T4版本。 Here就是一個例子,而here就是msdn的主題

0

MVC基礎結構對於這個任務來說太重了。除非您編寫/託管MVC應用程序來創建頁面,然後在通過電子郵件發送之前直接從URL中讀取html(這也可能意味着(在瀏覽器中查看此內容)鏈接已創建(如果將此用於新郵件)。對於特定的電子郵件,創建包含所有html(以及電子郵件所需的內聯樣式)的html模板文件,然後讀入html並替換標記,例如## TO_NAME ##等。令牌或列表(寫出的行)將會非常漂亮特定的代碼來每一個無妨。

這意味着你可以不從電子郵件模板取出令牌separatly更改電子郵件模板的代碼和ommit內容。

例如:

<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

這種方法的主要缺點是視圖引擎已經有了循環和條件等概念。因此,您可以「綁定」到代表作業列表的CLR對象的列表列表,並在您的視圖中指定要使用的標記。您的方法看起來像需要在代碼中生成一些HTML標記,這會在電子郵件的佈局和用於向其填充數據的代碼之間創建相當強的耦合。 – R0MANARMY 2010-10-19 16:55:16

+0

是的,它確實需要生成一些html,它只是OP現在正在做的改進版本。 – 2010-10-19 17:17:52

0

試試DotLiquid(www.dotliquidmarkup.org)。它是一種模板引擎,可以在各種應用程序中使用,語法簡單。

相關問題