2010-10-19 4 views
5

Ho un'applicazione per console che richiede l'invio di e-mail. In questo momento, utilizzo un generatore di stringhe per creare le e-mail, ma mi piacerebbe avere più fantasia. Poi mi è venuto in mente: sarebbe bello inviare il mio oggetto a una vista in stile ASP.NET MVC, dove avrei il markup HTML, e poi restituirlo alla posta. In questo momento, ho intenzione di farlo;Creazione di viste in stile ASP.NET MVC in un'applicazione console?

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); 
} 

Ovviamente questo è solo testo, ma mi piacerebbe davvero essere in grado di fare qualcosa di simile:

var body = RenderHTMLMessage(newJobs); 

Sembra come dovrei essere in grado di sfruttare motore di visualizzazione di ASP.NET MVC (o Spark o qualsiasi altro motore di visualizzazione) e non ruotare il mio. Se sono off-mark qui o c'è un modo più semplice per farlo, sono aperto a suggerimenti.

+0

Questa sembra essere una domanda correlata (e molto simile): http://stackoverflow.com/questions/1730134/asp-net-mvc-email. – R0MANARMY

risposta

3

È possibile utilizzare la Spark View Engine come general purpose templating engine. Il creatore di Spark ha scritto un post sul blog su come fare per farlo (sarebbe un buon inizio).

+0

Grazie, non posso credere di averlo perso. Spark sembra più facile al 100% rispetto a Razor per la configurazione e l'uso come soluzione di template standalone. Ciò potrebbe cambiare in futuro, ma questo è decisamente più maturo. –

0

Il problema qui è che ASP.NET MVC fa molto affidamento su ASP.NET e ASP.NET si basa su un server web. Non penso che sia fattibile nel modo che si desidera. Quello che potresti fare è ospitare ASP.NET tu stesso e richieste false a te stesso.

2

È possibile utilizzare T4 templates, che hanno una sintassi simile a asp.net, per fare questo . Richiede però la versione T4 fornita con VS2010. Here è un esempio e here è msdn sull'oggetto

0

L'infrastruttura MVC sarebbe troppo pesante per questa attività. a meno che tu non scriva/host un'applicazione MVC per creare le pagine, leggi html direttamente dall'URL prima di inviarlo via e-mail (questo potrebbe anche significare che il link (visualizza questo nel browser) è già stato creato (se si usa questo per newletters.

Per e-mail specifiche, crea file modello html che contengono tutti gli html (e gli stili incorporati richiesti dalle e-mail), quindi legge nell'html e sostituisce i token, ad esempio ## TO_NAME ##, ecc. I token o gli elenchi (righe scritte) saranno carini codice specifico per ciascuno di essi in ogni caso.

Ciò significa che è possibile modificare i modelli di posta elettronica separatamente per il codice e contenuti OMMIT da non rimuovere i gettoni dal nel modello di e-mail.

ad esempio:

<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

Lo svantaggio principale di questo approccio è che i motori di visualizzazione hanno già concetti come loop e condizionali integrati nella sintassi . Quindi è possibile "legare" a un elenco di oggetti CLR che rappresentano elenchi di lavoro e nella propria vista specificare quale markup utilizzare.Sembra che il tuo approccio richieda la generazione di alcuni markup HTML nel codice che crea un accoppiamento abbastanza forte tra il layout dell'email e il codice usato per popolarlo con i dati. – R0MANARMY

+0

Sì, richiede la generazione di alcuni html, è solo una versione migliorata di ciò che l'OP sta facendo ora. –

0

Provate a DotLiquid (www.dotliquidmarkup.org). È un motore di template che può essere utilizzato in ogni tipo di applicazione, con una sintassi semplice.