我正在mvc3中创建一个电子邮件引擎,尝试使用Razor视图作为电子邮件模板。据说这是可能的,但我还没有找到任何相关信息。
我正在mvc3中创建一个电子邮件引擎,尝试使用Razor视图作为电子邮件模板。据说这是可能的,但我还没有找到任何相关信息。
你可以使用http://razorengine.codeplex.com/来实现这个功能。它允许您在MVC之外使用Razor。
string Email = "Hello @Model.Name! Welcome to Razor!";
string EmailBody = Razor.Parse(Email, new { Name = "World" });
它很容易实现,并且可以在http://nuget.codeplex.com/上获取,以便轻松集成到您的项目中。
@Html
功能之类的特性。可能值得在codeplex页面上请求该支持。虽然MVC有自己的Razor解析器,但它实际上是与Razor本身分离的,所以我不确定是否可以轻松地完成。 - Buildstarted您可以使用模板文件作为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);
这与其他答案类似,但展示了从文本文件中快速加载模板的方法。
你或许应该考虑使用MvcMailer。如果你还没有在MVC中使用RazorEngine,那么它非常好用(我已经在WebForms上成功地使用过它),但如果你已经使用了MVC,那么你也可以利用它。
(来源:Hanselmen的NuGet每周推荐2)
HttpContext
,这就是为什么非MVC用户使用RazorEngine是个好选择,或者如果您计划从后台任务发送电子邮件的原因。 - Dunc@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
关于@thiagoleite提到的内容,我采用了Kazi Manzur Rashid的想法(经过允许)并进行了扩展,以便更符合我的使用需求。
所以请查看github项目“mailzor”
它也可以在Nuget.org/packages/mailzor上找到。