2009-07-09 16 views
5

... <MailDefinition> et <%%> espaces réservés


BodyFileName références attribut fichier disque contenant le corps du texte de courrier. Si nous mettons des espaces réservés <% UserName %> et <% Password %> dans le fichier texte du corps (RegistrationMail.txt), alors CreateUserWizard remplacera automatiquement ces espaces réservés par le nom d'utilisateur et le mot de passe d'un utilisateur créé.

A) Si je voulais créer un contrôle qui serait également capable de remplacer les espaces réservés <% %> dans un fichier avec du texte, comment ferais-je cela?

B) Puis-je également écrire dans ces espaces réservés à partir du code derrière le fichier? En d'autres termes, existe-t-il une méthode qui, lorsqu'elle est appelée, écrit un texte spécifique dans un espace réservé contenu dans un fichier txt?


Thanx

Répondre

9

Un String.replace simple() appelé en cas SendingMail le tour est joué.

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

Créer votre propre mécanisme d'emailing n'est pas si difficile non plus.

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(); 
} 
Questions connexes