Razor视图为电子邮件模板

时间:2010-12-06 16:47:31

标签: templates asp.net-mvc-3 razor

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

5 个答案:

答案 0 :(得分:63)

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

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

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

答案 1 :(得分:27)

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

Hello @Model.Name,

Welcome to @Model.SiteName!

Regards,
Site Admins

将该文件另存为“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);

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

答案 2 :(得分:13)

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

(通过Hanselmen's NuGet package of the week 2

答案 3 :(得分:4)

您还可以使用NuGet中的Essential Mail: Razor包。它构建在RazorEngine之上,为电子邮件呈现提供了简单的界面。

电子邮件信息模板类似于

@inherits Essential.Templating.Razor.Email.EmailTemplate
@using System.Net;
@{
    From = new MailAddress("example@email.com");
    Subject = "Email Subject";
}
@section Html 
{
   <html>
      <head>
          <title>Example</title>
      </head>
      <body>
          <h1>HTML part of the email</h1>
      </body>
   </html>
}
@section Text 
{
    Text part of the email.
}

在GitHub上阅读更多内容:https://github.com/smolyakoff/essential-templating/wiki/Email-Template-with-Razor

答案 4 :(得分:0)

Mailzor

与@thiagoleite提到的内容相关联,我接受了Kazi Manzur Ra​​shid的想法(经过许可)并延伸到对我如何使用它更加友好。

请查看github project 'mailzor'

它也在Nuget.org/packages/mailzor