【问题标题】:Using AspNet Razor to send emails built from templates使用 AspNet Razor 发送从模板构建的电子邮件
【发布时间】:2015-07-24 18:40:33
【问题描述】:

我正在尝试创建一种方法来编译 Razor 视图(我使用的是 Asp Net 5)并将其转换为可以作为电子邮件正文发送的字符串。到目前为止,我所拥有的是:

             MailMessage mailmessage  = new MailMessage("email@test.com",email);

        var parser = new RazorParser(new CSharpCodeParser(),
            new HtmlMarkupParser(),
            null);
        var result = parser.Parse(new StringReader("<p>Hello world. The time is @DateTime.UtcNow</p>"));

        mailmessage.Body = ""; // What to put here?

        mailmessage.IsBodyHtml = true;
        SmtpClient smtp = new SmtpClient("smtp.test.com");
        smtp.Port = 587;
        smtp.Credentials = // Removed
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        return smtp.SendMailAsync(mailmessage);

我不知道我需要做什么才能将 ParserResult 转换为可用于电子邮件正文的东西,我一直在挖掘 AspNet 源代码但还没有运气,有人知道该怎么做吗?

【问题讨论】:

    标签: asp.net asp.net-mvc razor asp.net-core-mvc


    【解决方案1】:

    使用此方法从当前控制器获取视图的内容作为字符串:

    private string getViewContents(string viewName, object model)
    {
      var writer = new StringWriter();
    
      ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
      var data = new ViewDataDictionary();
      data.Model = model;
    
      var viewContext = new ViewContext(ControllerContext, viewResult.View, data, new TempDataDictionary(), writer);
      viewResult.View.Render(viewContext, writer);
    
      return writer.GetStringBuilder().ToString();
    }
    

    【讨论】:

    • 我在这段代码中发现了一个问题。如果出现错误,请重试。
    • 有没有办法通过控制器做到这一点?我正在尝试在 MessageServices 文件中执行此操作,因此我可以将视图和模型的名称传递给它,并让它编译并从任何控制器发送电子邮件。如果不是,我想我可以将其作为扩展方法添加到 Controller 并将结果传递给默认的 SendEmail 方法。
    • 我只是向这个函数添加一个参数,它接受一个 ControllerContext 对象。这似乎是最简单的方法。
    • 谢谢,你能帮我弄清楚我需要添加哪些 using 语句吗?我正在使用 VSCode,它无法给我智能感知,它说 ControllerContext 甚至不存在:P
    • 你应该需要:System.Web.Mvc 和 System.IO
    猜你喜欢
    • 1970-01-01
    • 2018-07-11
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2016-10-08
    相关资源
    最近更新 更多