Rob*_*ous 4 asp.net-mvc mailmessage asp.net-mvc-3 asp.net-mvc-4
我的应用程序分为三层:
在我的服务层中,我调用了一个EmailSender服务,该服务目前通过SmtpClient和MailMessage发送明文电子邮件.据我所知,相当标准的东西.
我现在正在尝试使用Razor模板格式化这些电子邮件的主体,该模板接受MailMessage作为模型,并生成一些HTML,我可以将其粘贴到邮件正文中.
现在这就是我所拥有的:
public void SendAsyncEmail(MailMessage message)
{
message.IsBodyHtml = true;
message.body = {generate html string from body here using razor?}
// Async code here
}
Run Code Online (Sandbox Code Playgroud)
假设我定义了一个这样的剃刀视图:
@model System.Net.Mail.MailMessage
<div>
<h1>@Model.Subject</h1>
<p>@Model.Body</p>
</div>
Run Code Online (Sandbox Code Playgroud)
如何从我的服务方法将MailMessage传递到此视图中,并为其生成电子邮件正文的字符串?
要渲染视图,您需要使用视图引擎和视图上下文.视图引擎负责查找和呈现视图.视图上下文包含有关视图及其状态的信息.
public ActionResult Index()
{
StringWriter sw = new StringWriter();
ViewEngineResult result = ViewEngines.Engines.FindView(ControllerContext, "Index", "_Layout");
ViewContext context = new ViewContext(ControllerContext, result.View, ViewData, TempData, sw);
result.View.Render(context, sw);
result.ViewEngine.ReleaseView(ControllerContext, result.View);
string viewString = sw.ToString();
return Content(viewString);
}
Run Code Online (Sandbox Code Playgroud)
传递模型使用ViewData(即可从控制器获得的属性).
ViewData.Model = new MailMessage();
Run Code Online (Sandbox Code Playgroud)
我还强烈推荐 Postal和MvcMailer作为您当前方法的替代方案.它们都遵循使用视图(例如剃刀)生成电子邮件的相同原则.设置非常简单,奖励是值得的.
如果您的应用程序使用了大量电子邮件,那么我建议您尝试使用它们.
| 归档时间: |
|
| 查看次数: |
3959 次 |
| 最近记录: |