2009-10-28 28 views
6

¿Cuál sería la forma más sencilla de enviar un correo html personalizado utilizando asp.net?ASP.NET MVC: ¿Cómo enviar un correo electrónico html usando un controlador?

Supongo que idealmente me gustaría enviar html por correo electrónico en lugar de devolverlo al navegador a través de ActionResult, como lo haría normalmente. De esta forma podría construir el correo electrónico como una vista, suministrarlo con datos a través de un modelo y luego iniciarlo usando material estándar de correo electrónico .NET.

¿Es esto factible/la forma de hacerlo?

Gracias,

+0

vea también: http://stackoverflow.com/questions/118532/what-is-the-best -dirección-a-enviar-a-html-email-desde-asp-net-mvc –

Respuesta

9

http://www.brightmix.com/blog/renderpartial-to-string-in-asp-net-mvc/ tiene una buena solución para la representación de una vista a una cadena para que pueda enviarlo por correo electrónico.

/// Static Method to render string - put somewhere of your choosing 
public static string RenderPartialToString(string controlName, object viewData) 
{ 
    ViewDataDictionary vd = new ViewDataDictionary(viewData); 
    ViewPage vp = new ViewPage { ViewData = vd }; 
    Control control = vp.LoadControl(controlName); 

    vp.Controls.Add(control); 

    StringBuilder sb = new StringBuilder(); 
    using (StringWriter sw = new StringWriter(sb)) 
    { 
     using (HtmlTextWriter tw = new HtmlTextWriter(sw)) 
     { 
      vp.RenderControl(tw); 
     } 
    } 

    return sb.ToString(); 
} 
+0

hola, ¿qué es 'object viewData' param? ¿Qué tenemos cuando el método lo llamó? –

5

Creo que el envío de correo electrónico en el MVC es lo mismo que en forma de banda, sólo tiene que establecer el atributo del mensaje de correo a HTML permitido entonces es comida para llevar. Al igual que el código

MailMessage mm = new MailMessage(emmailFrom,emailTo); 
mm.Subject = "Your Subject"; 
mm.IsBodyHtml = true; 
mm.Body = body.ToString(); 

SmtpClient smtp = new SmtpClient(); 
smtp.Send(mm); 
+0

disculpas, probablemente no estaba claro. Id desea poder enviar una vista como el cuerpo de un correo electrónico, en lugar de devolverlo al navegador. :) – Sergio

-1

También es necesario añadir a continuación los códigos antes de enviar correo:

mailMessage.IsBodyHtml = true; 
Cuestiones relacionadas