Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates Razor视图作为电子邮件模板_Templates_Asp.net Mvc 3_Razor - Fatal编程技术网

Templates Razor视图作为电子邮件模板

Templates Razor视图作为电子邮件模板,templates,asp.net-mvc-3,razor,Templates,Asp.net Mvc 3,Razor,我正在mvc3中创建一个电子邮件引擎,并尝试使用razor视图作为电子邮件模板。 我听说这是可能的,但我还没有找到任何关于它的信息 您可以使用来实现这一点。它允许您在mvc之外使用razor string Email = "Hello @Model.Name! Welcome to Razor!"; string EmailBody = Razor.Parse(Email, new { Name = "World" }); 它易于实现,并且可以在上轻松集成到您的项目中。您可以使用模板文件作为r

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

您可以使用来实现这一点。它允许您在mvc之外使用razor

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

它易于实现,并且可以在上轻松集成到您的项目中。

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

Hello @Model.Name,

Welcome to @Model.SiteName!

Regards,
Site Admins
将该文件另存为“WelcomeMessage.cshtml”、“WelcomeMessage.template”等格式。在解决方案资源管理器中选择该文件,并在属性窗口中选择“复制到输出目录”,然后选择“始终复制”。唯一的缺点是该模板必须随应用程序一起使用,并且不能作为类进行编译

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

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

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

你也许应该考虑一下。如果您还没有使用MVC(我已经在webforms环境中成功地使用了它),RazorEngine是(非常)好的,但是如果您有MVC,您也可以利用它

(via)

Mailzor 与@thiagoleite提到的内容相联系,我采纳了Kazi Manzur Rashid的想法(经允许),并将其扩展到更友好的方式来使用它

因此,请查看

它也在

上,您也可以使用NuGet提供的包。它是在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.
}
@继承Essential.Templating.Razor.Email.EmailTemplate
@Net系统;
@{
发件人=新的邮件地址(“example@email.com");
主题=“电子邮件主题”;
}
@节Html
{
例子
电子邮件的HTML部分
}
@章节文本
{
电子邮件的文本部分。
}

在GitHub上阅读更多信息:

我将在BuildStarted上明确检查这一点。但有一个问题:如果我理解正确,这不是razor默认内置的吗?看起来很棒。不过还有一个问题:您仍然可以使用*.cshtml“页面”作为模板吗?不,默认情况下它没有内置到razor中。好问题。虽然我确信它可以通过razor处理cshtml页面,但它不支持开箱即用,因为您必须添加额外的模板来支持诸如
@Html
功能等功能。可能值得在codeplex页面请求这种支持。尽管MVC有自己的razor解析器,它实际上是独立于razor本身的,所以我不确定它是否能那么容易地完成。感谢@BuildStarted,这是一个非常有用的实用程序/库,可以在Windows服务中处理电子邮件。例如,你把cshtml模板放在哪里?对于资源?如果有必要,披露说明是我正在维护/处理的内容。请注意,MvcMailer需要一个
HttpContext
,这就是为什么RazorEngine对于非MVC用户是一个不错的选择,或者如果您计划从后台任务发送电子邮件。