【问题标题】:Send Scheduled Email using email Templates in .NET MVC3 using C#使用 C# 在 .NET MVC3 中使用电子邮件模板发送预定电子邮件
【发布时间】:2013-12-29 12:15:10
【问题描述】:

我正在开发一个 .NET MVC3 Web 应用程序 在此我的目标是发送预定的电子邮件,我将在其中使用电子邮件模板。 我很困惑我应该遵循什么来实现我的目标。

我试过MVC Mailer。但它不适用于调度程序。(流利的调度程序) 我尝试将RazorEngine 与电子邮件模板一起使用,但不知何故未能成功附加HTML Email Templates

请帮忙...

【问题讨论】:

    标签: c# asp.net-mvc-3 scheduled-tasks email-templates


    【解决方案1】:

    使用RazorEngine 这样的东西应该会有所帮助,非常简单:

    public bool SendEmailMessage(string template, object viewModel, string to, string @from, string subject, params string[] replyToAddresses)
        {
           var compiledTemplate = LoadTemplate(template, viewModel);
    
           return  SendEmail(from, to, subject, compiledTemplate, from, null, replyToAddresses);
    
        }
    
    public bool SendEmailMessageWithAttachments(string template, object viewModel, string to, string @from, string subject, List<Attachment> attachedFiles, params string[] replyToAddresses)
            {
                var compiledTemplate = LoadTemplate(template, viewModel);
                return SendEmail(from, to, subject, compiledTemplate, from, attachedFiles, replyToAddresses);
            } 
    
     public string LoadTemplate(string template, object viewModel)
            {
                var templateContent = AttemptLoadEmailTemplate(template);
                var compiledTemplate = Razor.Parse(templateContent, viewModel);
    
                return compiledTemplate;
            }
    
        private string AttemptLoadEmailTemplate(string name)
        {
            if (File.Exists(name))
            {
                var templateText = File.ReadAllText(name);
                return templateText;
            }
    
            var templateName = string.Format("~/Data/EmailTemplates/{0}.html", name); //Just put your path to a scpecific template
            var emailTemplate = HttpContext.Current.Server.MapPath(templateName);
    
            if (File.Exists(emailTemplate))
            {
                var templateText = File.ReadAllText(emailTemplate);
                return templateText;
            }
    
            return null;
        }
    
        private bool SendEmail(string from, string to, string subject, string body, string replyTo, List<Attachment> attachedFiles, params string[] replyToAddresses)
                {
                    replyTo = replyTo ?? from;
                    attachedFiles = attachedFiles ?? new List<Attachment>();
    
                    var message = new MailMessage(from, to, subject, body);
                    message.ReplyToList.Add(replyTo);
    
                    foreach (var attachedFile in attachedFiles)
                        message.Attachments.Add(attachedFile);
    
            try
            {
                smtpClient.SendAsync(email, null);
                return true;
            }
            catch (Exception exption)
            {
                return false;
            }
          }
    

    希望对你有帮助

    编辑:

    假设您有一个名为“TestTemplate”的模板:

    亲爱的@Model.Name

    想象一下,如果这是一个普通的 cshtml 视图,并把你的模型属性像这样:@Model.SomeProperty

    干杯。

    使用位于我在辅助方法 AttempLoadEmailTemplate 中作为前缀的路径中的上一个模板,您可以发送这样的电子邮件:

    var viewModel = new { Name = "Aks", SomeProperty = "Foo" };
    
    mailService.SendEmailMessage("TestTemplate", viewModel, "aks@gmail.com", "daniel@gmail.com", "testing razor engine", null);
    

    【讨论】:

    • @aks:我编辑了我的答案,现在我只是使用 MapPath 来获取路径
    • 我在使用电子邮件模板时遇到问题...你能举个模板的例子吗...
    • @aks:我加了一个例子
    • 我是剃刀和剃刀视图的新手。我收到此错误:{"Object reference not set to an instance of an object."}。我将 .cshtml 称为 var templateName = string.Format("~/Views/Home/{0}.cshtml", name);,而 cshml 中的代码是:@model MvcApplicationRazor.Models.PageModel @{ ViewBag.Title = "About Us"; } &lt;h2&gt;About&lt;/h2&gt; &lt;p&gt; Put content here. Hello @Model.Name Email: @Html.TextBoxFor(m =&gt; m.Email) &lt;/p&gt;
    • @aks:模板可以只是一个简单的文件(.txt)
    猜你喜欢
    • 2010-12-18
    • 2012-05-17
    • 1970-01-01
    • 2020-09-11
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 2020-09-08
    相关资源
    最近更新 更多