<MailDefinition> и <%%> заполнители - PullRequest
5 голосов
/ 09 июля 2009

...


Атрибут BodyFileName ссылается на файл диска, содержащий основной текст письма. Если мы поместим заполнители <% UserName %> и <% Password %> в основной текстовый файл ( RegistrationMail.txt ), то CreateUserWizard автоматически заменит эти заполнители на имя пользователя и пароль созданного пользователя.

A) Если бы я хотел создать элемент управления, который также мог бы заменить заполнители <% %> в файле некоторым текстом, как бы я это сделал?

B) Могу ли я также записать в эти заполнители из кода за файлом? Имеется в виду, есть ли какой-нибудь метод, который при вызове записывает определенный текст в заполнитель, содержащийся в каком-то текстовом файле?


1024 * спасибо *

1 Ответ

9 голосов
/ 06 октября 2009

Простая string.Replace (), вызываемая в событии SendingMail, делает свое дело.

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

Создать свой собственный механизм электронной почты тоже не сложно.

using( MailMessage message = new MailMessage() )
{
    message.To.Add( "none@none.com" );
    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();
}
...