Razor视图为电子邮件模板

sTo*_*rov 53 templates razor asp.net-mvc-3

我正在mvc3中创建一个电子邮件引擎,我正在尝试将剃刀视图用作电子邮件模板.我听说这是可能的,但我还没有找到任何有关它的信息.

Bui*_*ted 63

您可以使用http://razorengine.codeplex.com/来实现此目的.它允许你在mvc之外使用剃须刀.

string Email = "Hello @Model.Name! Welcome to Razor!";
string EmailBody = Razor.Parse(Email, new { Name = "World" });
Run Code Online (Sandbox Code Playgroud)

它实现起来很简单,可以在http://nuget.codeplex.com/上找到,以便轻松集成到您的项目中.


Jef*_*Fay 27

您可以使用模板文件作为剃须刀电子邮件正文模板.您可以使用您选择的任何扩展名,因为您可以在.Net中将文件作为文本加载.让我们使用以下示例作为模板:

Hello @Model.Name,

Welcome to @Model.SiteName!

Regards,
Site Admins
Run Code Online (Sandbox Code Playgroud)

将该文件保存为"WelcomeMessage.cshtml","WelcomeMessage.template"等.在解决方案资源管理器中选择该文件,然后在"属性"窗口中选择"复制到输出目录"并选择"始终复制".唯一的缺点是该模板必须伴随应用程序而不能作为类进行编译.

现在我们要将其解析为字符串以分配给邮件消息正文.Razor将获取模板和模型类,解析它们,然后返回包含必要值的字符串.在您的应用程序中,您需要添加可以在NuGet中找到的RazorEngine包.这是一个简短的代码示例来说明用法:

using System.IO;
using RazorEngine;

// ...
MyModel model = new MyModel { Name = "User", SiteName = "Example.com" };
string template = File.OpenText("WelcomeMessage.template").ReadToEnd();
string message = Razor.Parse(template, model);
Run Code Online (Sandbox Code Playgroud)

它与其他答案类似,但显示了从文本文件加载模板的快速方法.


JT.*_*JT. 13

你应该考虑MvcMailer.如果你还没有使用MVC(我已经在webforms上下文中成功使用过它),那么RazorEngine是非常好的,但如果你有MVC,你也可以利用它.

(通过Hanselmen的第2周的NuGet套餐)

  • 需要注意的是MvcMailer需要`HttpContext`,这就是为什么RazorEngine对于非MVC用户一个不错的选择,或者如果你打算从后台任务发送电子邮件. (2认同)