Razor Ver página como modelo de E-mail

Desenhei um modelo de E-mail a partir da sintaxe Razor. Quando eu envio este modelo como e-mail usando C# code e protocolo SMTP, eu recebo marcas navalha e HTML como Corpo de E-mail. Estou errado nesta abordagem? As Páginas Razor são permitidas como modelo de E-mail?

Aqui está a minha página.
@inherits ViewPage
@{
Layout = "_Layout";
ViewBag.Title = "";
}
<div class="container w-420 p-15 bg-white mt-40">
<div style="border-top:3px solid #22BCE5">&nbsp;</div>
<span style="font-family:Arial;font-size:10pt">
    Hello <b>{UserName}</b>,<br /><br />
    Thanks for Registering to XYZ Portal<br /><br />
    <a style="color:#22BCE5" href="{Url}">Click to Confirm Email</a><br />

    <br /><br />
    Thanks<br />
    Admin (XYZ)
</span>

actualização..

 using (StreamReader reader = new StreamReader(HttpContext.Current.Server.MapPath("~/ContentPages/EmailConfTemplate.cshtml")))
  {
     body = reader.ReadToEnd();
     //Replace UserName and Other variables available in body Stream
     body = body.Replace("{UserName}", FirstName);

  }
Mais tarde, vou substituir o código SMTP as ..

  MailMessage message = new MailMessage(
    ApplicationWideData.fromEmailId, // From field
    ToEmailId, // Recipient field
    "Click On HyperLink To Verify Email Id", // Subject of the email message
    body
   );
Author: Lara, 2015-10-14

4 answers

As mensagens de E-Mail só compreendem dois formatos: texto simples e HTML. Uma vez que Razor não é nenhum dos dois, ele vai precisar ser processado por algum motor, de modo que ele lhe dá de volta o HTML gerado.

É exactamente o que acontece quando se usa o Razor. ASP.NET acidente de viação, nos bastidores. O arquivo Razor é compilado em uma classe C# interna, que é executada, e o resultado da execução é o conteúdo de cadeia de caracteres do HTML, que é enviado para o cliente. O teu problema é que queres e precisa desse processamento para correr, apenas para obter o HTML de volta como uma string, em vez de ser enviado para o navegador. Depois disso você pode fazer o que quiser com a string HTML, incluindo enviá-la como um e-mail. Há vários pacotes que incluem este poder, e eu usei o Westwind.RazorHosting com sucesso, mas também pode usar Razorengina {[10] } com resultados semelhantes. Eu preferiria RazorHosting para aplicações independentes Não-web, e RazorEngine para web aplicações Aqui está uma versão (desinfectada) de algum do meu código - estou a usar o Westwind.RazorHosting para enviar e-mails formatados a partir de um serviço windows, usando uma vista fortemente digitada.
RazorFolderHostContainer host = = new RazorFolderHostContainer();
host.ReferencedAssemblies.Add("NotificationsManagement.dll");
host.TemplatePath = templatePath;
host.Start();
string output = host.RenderTemplate(template.Filename, model);

MailMessage mm = new MailMessage { Subject = subject, IsBodyHtml = true };
mm.Body = output;
mm.To.Add(email);

var smtpClient = new SmtpClient();
await smtpClient.SendMailAsync(mm);
 13
Author: SWeko, 2015-10-14 12:03:38
Já deste uma vista de olhos?

É um pacote gratuito disponível do GitHub ( https://github.com/smsohan/MvcMailer)

Também há um guia passo a passo para ele https://github.com/smsohan/MvcMailer/wiki/MvcMailer-Step-by-Step-Guide

Também está no Nuget. https://www.nuget.org/packages/MvcMailer Basicamente, vai processar a tua visão em html.
 3
Author: Darren, 2015-10-14 12:24:27

Vê um processador de lâminas como o RazorEngine ( https://razorengine.codeplex.com/ que está disponível em NuGet. Ele processa razor para criar uma saída, que é o que você então usaria como o corpo de seu e-mail.

 1
Author: Chris Disley, 2015-10-14 11:57:52

O projecto Mailzory é uma escolha valiosa e conveniente para enviar e-mails que têm modelos de navalha.

// template path
var viewPath = Path.Combine("Views/Emails", "hello.cshtml");
// read the content of template and pass it to the Email constructor
var template = File.ReadAllText(viewPath);

var email = new Email(template);

// set ViewBag properties
email.ViewBag.Name = "Johnny";
email.ViewBag.Content = "Mailzory Is Funny";

// send email
var task = email.SendAsync("[email protected]", "subject");
task.Wait()
Este projecto está hospedado no Github. Também existe um pacote nuget disponível para Mailzory.
 0
Author: Ehsan Mirsaeedi, 2017-09-15 03:41:43