0

私は.NET MVC3 Web アプリケーションに取り組んでいます 。これで私の目標は、電子メール テンプレートを使用する予定の電子メールを送信することです。私は自分の目標を達成するために何に従うべきかとても混乱しています。

やってみMVC Mailerました。(Fluent Scheduler)RazorEngineメールテンプレートで使ってみたのですが、なぜか添付できませんでしたHTML Email Templates

助けてください...

4

1 に答える 1

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);
于 2013-12-11T14:53:19.967 に答える