Templates Razor视图作为电子邮件模板
我正在mvc3中创建一个电子邮件引擎,并尝试使用razor视图作为电子邮件模板。 我听说这是可能的,但我还没有找到任何关于它的信息 您可以使用来实现这一点。它允许您在mvc之外使用razorTemplates 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
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用户是一个不错的选择,或者如果您计划从后台任务发送电子邮件。