设计发送电子邮件通知的问题

时间:2011-06-19 23:05:35

标签: c# asp.net asp.net-mvc-3

我有一个非常基本的问题,但解决方案可能有些复杂。

  1. 网站开发者如何发送电子邮件,例如忘记密码链接,注册消息和/或任何其他需要发送的通知。
  2. 开发人员是否将消息存储在SQL服务器中,这是一个单独的类,XML ??
  3. 我正在使用Onion模型,我的SMTP接口在app.core中,但我发送邮件的基类位于infrastructure.backends中。我不希望我的应用程序服务依赖于后端,不确定这是错误的还是我是强迫症。

    我使用Ninject作为我的IOC / DI。

4 个答案:

答案 0 :(得分:6)

使用Postal。我认为这是开发电子邮件模板的最有效方式。可以建立架构,牢记它。它允许我们在不重新编译代码的情况下更改模板。

根据架构,我将其作为应用程序服务的一部分并没有任何问题。

答案 1 :(得分:2)

如果您要发送HTML电子邮件,我会使用精简的主/布局页面和视图。然后我让控制器将该视图呈现为一个字符串,以便在电子邮件中使用。它就像任何其他mvc视图和模型一样。

答案 2 :(得分:0)

在c#中你是System.Net.Mail。我会为你做大部分事情。

答案 3 :(得分:0)

从我发现的帖子略微修改,这似乎是正确的滚动方式。至少这是一个开始  公共接口IViewMailer     {         string RenderPartialViewToString(string viewName,object model,ControllerContext controllerContext);     }

public class ViewMailer : IViewMailer
{
    #region IViewMailer Members

    public string RenderPartialViewToString(string viewName, object model, ControllerContext controllerContext)
    {
        if (string.IsNullOrEmpty(viewName))

            viewName = controllerContext.RouteData.GetRequiredString("action");
        controllerContext.Controller.ViewData.Model = model;
        using (var stringWriter = new StringWriter())
        {
            ViewEngineResult viewEngineResult = ViewEngines.Engines.FindPartialView(controllerContext, viewName);
            var viewContext = new ViewContext(controllerContext, viewEngineResult.View,
                                              controllerContext.Controller.ViewData,
                                              controllerContext.Controller.TempData, stringWriter);
            viewEngineResult.View.Render(viewContext, stringWriter);
            return stringWriter.GetStringBuilder().ToString();
        }
    }

    #endregion
}