As a part of our main customer-facing site, we send out a ton of e-mails - daily status reports, invoices, etc. and we needed a simple mechanism to allow for easy editing of our HTML emails, while allowing them to have dynamic parameters (i.e. fields from a datatable, etc.)
We start by creating a separate HTML file with all of our formatting, and parameter placeholders for our dynamic data (i.e. "Hello, {0}").
The code snippet itself is pasted below:
//Set up our SMTP client
SmtpClient scli = new SmtpClient("smtp.mymailserver.com");
scli.Credentials = new System.Net.NetworkCredential("johndoe@mymailserver.com", "mypass");
scli.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
//Address setup
MailAddress fromAddress = new MailAddress("johndoe@mymailserver.com");
MailAddress toAddress = new MailAddress("snuffysmith@mycompany.com");
MailMessage myMessage = new MailMessage();
myMessage.To.Add(toAddress);
myMessage.From = fromAddress;
//Read our HTML file into a string variable. The file location
//could be a parameter or pulled from a configuration file/database
StreamReader r = new StreamReader(@"\\MyServer\Templates\DailyReport.htm");
string strBody = r.ReadToEnd();
//Using String.Format, we replace all of our parameters. parm
//values could be from a database, etc. In the sample below, we have one
//parameter (the user's first name). The corresponding HTML snippet
//would be 'Hello, {0}'
myMessage.Body = String.Format(strBody,"Bob");
myMessage.IsBodyHtml = true;
myMessage.Subject = "Test HTML EMail";
//Send our Email
scli.Send(myMessage);