2010-10-19 5 views
5

Tengo una aplicación de consola que requiere que envíe correos electrónicos. Ahora mismo uso un generador de cadenas para crear los correos electrónicos, pero me gustaría ser más elegante. Entonces me di cuenta: sería bueno enviar mi objeto a una vista de estilo ASP.NET MVC, donde tendría el marcado HTML, y luego devolverlo para enviarlo por correo. En este momento, lo tengo como;Creando vistas de estilo ASP.NET MVC en una aplicación de consola?

private void MailJobList(List<Job> newJobs) { 
       var body = new System.Text.StringBuilder(); 
       var from = new MailAddress("[email protected]"); 
       var to = new MailAddress(addresslist.Get()); 

       var message = new MailMessage(from, to); 

       message.Subject = "New job list"; 

    //mail settings ommitted here for brevity 

       body.Append("New jobs: "); 
       if (newJobs.Any()) { 
        foreach (var newJob in newJobs) { 
         body.Append(newJob.Job + ", "); 
        } 
       } 

       message.Body = body.ToString(); 

       client.Send(message); 
} 

Obviamente eso es sólo texto plano, pero realmente me gustaría ser capaz de hacer algo como:

var body = RenderHTMLMessage(newJobs); 

Parece que yo debería ser capaz de aprovechar el motor de vista de ASP.NET MVC (o Spark o cualquier otro motor de visualización) y no ruede el mío. Si estoy fuera de la marca aquí o hay una manera más fácil de hacerlo, estoy abierto a sugerencias.

+0

Esto parece ser una pregunta relacionada (y muy similar): http://stackoverflow.com/questions/1730134/asp-net-mvc-email. – R0MANARMY

Respuesta

3

Usted puede utilizar el Spark View Engine como general purpose templating engine. El creador de Spark escribió un blog sobre cómo hacerlo (sería un buen comienzo).

+0

Gracias, no puedo creer que me haya perdido eso. Spark parece 100% más fácil que Razor para configurar y usar como una solución de plantillas independiente. Eso puede cambiar en el futuro, pero definitivamente es más maduro. –

0

El problema aquí es que ASP.NET MVC depende en gran medida de ASP.NET, y ASP.NET se basa en un servidor web ... No creo que sea posible de la manera que desee. Lo que podría hacer es alojar ASP.NET usted mismo y realizar solicitudes falsas.

2

Puede utilizar T4 templates, que tienen una sintaxis similar a asp.net, para hacer esto . Sin embargo, requiere la versión T4 que se envía con VS2010. Here es un ejemplo, y here es msdn en el asunto

0

La infraestructura de MVC sería demasiado pesada para esta tarea. a menos que escriba/aloje una aplicación MVC para crear las páginas y luego lea html directamente desde la URL antes de enviarlas por correo electrónico (esto también podría significar que el enlace (ver esto en el navegador) ya está creado (si usa esto para newletters)

Para correos electrónicos específicos, cree archivos de plantilla html que contengan todos los html (y los estilos en línea requeridos por los correos electrónicos), luego lea en el html y reemplace los tokens, por ejemplo, ## TO_NAME ## etc. Los tokens o listas (filas escritas) serán bonitos código específico para cada uno de todos modos.

Esto significa que puede cambiar las plantillas de correo electrónico separadamente al código y el contenido ommit no eliminando las fichas de la plantilla de correo electrónico.

por ejemplo:

<html> 
<body style="font-size:10px"> 
Dear ##To_NAME##< /br> 
</br> 
Your Jobs< /br> 
    <table> 
     <tr> 
     <td colspan="2">New Jobs<td> 
     </tr> 
     ##JOB_LIST## 
    <table> 
    ##FROM_NAME## 
</body> 
</html> 
+0

La principal desventaja de este enfoque es que los motores de vista ya tienen conceptos como bucle y condicionales horneados en la sintaxis . Por lo tanto, podría "enlazar" a una lista de objetos CLR que representan listados de trabajos y en su vista especificar qué marcado usar.Parece que su enfoque requeriría generar algún código HTML en el código que crea un acoplamiento bastante fuerte entre el diseño del correo electrónico y el código utilizado para llenarlo con datos. – R0MANARMY

+0

Sí, requiere la generación de algunos html, solo una versión mejorada de lo que el OP está haciendo ahora. –

0

Prueba DotLiquid (www.dotliquidmarkup.org). Es un motor de plantillas que se puede utilizar en todo tipo de aplicaciones, con una sintaxis sencilla.

Cuestiones relacionadas