我有一个控制台应用程序,需要我发送电子邮件。现在我使用字符串生成器来创建电子邮件,但我想更加喜欢。然后它突然出现在我身上:将我的对象发送到ASP.NET MVC样式视图会很好,我会在其中获得HTML标记,然后将其返回到邮件中。现在,我把它作为;
private void MailJobList(List<Job> newJobs) {
var body = new System.Text.StringBuilder();
var from = new MailAddress("daemon@mydomain.com");
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 :(得分:4)
您可以在控制台应用中使用新的Razor视图引擎,请参阅以下博文:
http://thegsharp.wordpress.com/2010/07/07/using-razor-from-a-console-application/
答案 1 :(得分:3)
您可以将Spark View Engine用作general purpose templating engine。 Spark的创建者写了一篇关于如何去做的博客文章(这将是一个好的开始)。
答案 2 :(得分:2)
您可以使用T4 templates来执行此操作,其语法类似于asp.net。但它需要VS2010附带的T4版本。 Here就是一个例子,here是关于主题的msdn
答案 3 :(得分:0)
这里的问题是ASP.NET MVC在很大程度上依赖于ASP.NET,并且ASP.NET依赖于Web服务器。我认为它不像你想要的那样可行。您可以做的是自己托管ASP.NET,并向自己伪造请求。
答案 4 :(得分:0)
MVC基础设施对于此任务来说太重了。除非您编写/托管MVC应用程序来创建页面,然后在发送电子邮件之前直接从URL读取html(这也可能意味着已经创建了(在浏览器中查看此链接)链接(如果将其用于新手中。
对于特定的电子邮件,创建包含所有html(以及电子邮件所需的内联样式)的html模板文件,然后读入html并替换标记,例如## TO_NAME ## etc标记或列表(写出的行)无论如何,每个人都会有非常具体的代码。
这意味着您可以将电子邮件模板分别更改为代码,并通过不从电子邮件模板中删除令牌来省略内容。
例如:
<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>
答案 5 :(得分:0)
试试DotLiquid(www.dotliquidmarkup.org)。它是一个模板引擎,可以在各种应用程序中使用,语法简单。