2009-07-09 12 views
5

... <MailDefinition><%%> y marcadores de posición


BodyFileName atributo de archivo de disco que contiene las referencias de texto del cuerpo del correo. Si colocamos marcadores de posición <% UserName %> y <% Password %> en el archivo de texto del cuerpo (RegistrationMail.txt), entonces CreateUserWizard reemplazará automáticamente estos marcadores con el nombre de usuario y la contraseña de un usuario creado.

A) Si quisiera crear un control que también podría reemplazar los marcadores de posición <% %> en un archivo con texto, ¿cómo lo haría?

B) ¿Puedo escribir también en estos marcadores de posición desde el código detrás del archivo? Es decir, ¿hay algún método que, cuando se llame, escriba texto específico en marcador de posición contenido en algún archivo txt?


Gracias

Respuesta

9

Un String.Replace sencilla() llamada en caso SendingMail hace el truco.

protected void CreateUserWizard1_SendingMail(object sender, MailMessageEventArgs e) 
{ 
    // Replace <%foo%> placeholder with foo value 
    e.Message.Body = e.Message.Body.Replace("<%foo%>", foo); 
} 

Crear su propio mecanismo de correo electrónico tampoco es tan difícil.

using(MailMessage message = new MailMessage()) 
{ 
    message.To.Add("[email protected]"); 
    message.Subject = "Here's your new password"; 
    message.IsBodyHtml = true; 
    message.Body = GetEmailTemplate(); 

    // Replace placeholders in template. 
    message.Body = message.Body.Replace("<%Password%>", newPassword); 
    message.Body = message.Body.Replace("<%LoginUrl%>", HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + FormsAuthentication.LoginUrl); // Get the login url without hardcoding it. 

    new SmtpClient().Send(message); 
} 

private string GetEmailTemplate() 
{ 
    string templatePath = Server.MapPath(@"C:\template.rtf"); 

    using(StreamReader sr = new StreamReader(templatePath)) 
     return sr.ReadToEnd(); 
} 
Cuestiones relacionadas