Ciao,
è comprensibile che questo succeda perché alla tua istanza di WebClient non hai aggiunto il cookie di autenticazione. Il server percepirà questa richiesta come proveniente da un utente anonimo, dato che manca il cookie.
Comunque... abbandona questa strada, si presta molto facilmente a problemi, come hai già potuto sperimentare.
Razor può essere usato anche separatamente da MVC e questo ti consente di sfruttarne la potenza senza dover effettuare chiamate web con il WebClient. Perciò potresti addirittura usarlo in applicazioni windows.
La cosa più semplice da fare è aggiungere un riferimento al progetto
RazorEngine che trovi su Codeplex. Lo puoi installare facilmente usando NuGet.
Dopodiché, modifica il tuo metodo GetEmailBody così (diventa veramente semplice ed efficiente).
public string GetEmailBody(string templatePath, Cliente u)
{
string template = "Bevenuto @Model.Email! La tua password è @Model.Password!";
return Razor.Parse(template, new { u.Email, u.Password });
}
Grazie al progetto RazorEngine puoi sfruttare Razor in due righe di codice, letteralmente.
Ovviamente questo codice è puramente dimostrativo. Tu, penso, vorrai salvare ogni template e-mail in un proprio file .cshtml, così da poter contare sull'intellisense di Visual Studio mentre li crei o li modifichi. Volendo leggere il template da file, modifica il codice così:
string template = System.IO.File.ReadAllText(Server.MapPath("~/Content/Templates/Benvenuto.cshtml"));
In ultimo, elimina la tua action WelcomeEmail dato che ormai non serve più.
ciao,
Modificato da BrightSoul il 22 ottobre 2011 11.27 -