public static MailMessage CreateEmailFromTemplate <T>(string htmlTemplateFile, string textTemplateFile, T model) where T : class { ReplaceTemplate htmlTpl = new ReplaceTemplate(htmlTemplateFile); ReplaceTemplate txtTpl = new ReplaceTemplate(textTemplateFile); var props = model.GetType().GetProperties().Where(q => q.CanRead); foreach (PropertyInfo p in props) { txtTpl.AddReplacementValue(p.Name, GetPropertyValue(model, p.Name).ToString()); htmlTpl.AddReplacementValue(p.Name, GetPropertyValue(model, p.Name).ToString()); } MailMessage msg = new MailMessage(); msg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(htmlTpl.GetTemplate(), null, MediaTypeNames.Text.Html)); msg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(txtTpl.GetTemplate(), null, MediaTypeNames.Text.Plain)); //optional AppSettings values SetOptionalDefaults(msg); return(msg); }
/// <summary> /// Generates email message based on a template /// </summary> /// <typeparam name="T">Model type for template string replacements</typeparam> /// <param name="template">path to template file relative to the executable</param> /// <param name="model">Model Data for template replacements - only properties in a readable scope are used in replacements(privates are hidden from replacements)</param> /// <returns></returns> public static MailMessage CreateEmailFromTemplate <T>(string template, T model) where T : class { ReplaceTemplate tpl = new ReplaceTemplate(template); var props = model.GetType().GetProperties().Where(q => q.CanRead); foreach (PropertyInfo p in props) { tpl.AddReplacementValue(p.Name, GetPropertyValue(model, p.Name).ToString()); } MailMessage msg = new MailMessage { Body = tpl.GetTemplate() }; //optional AppSettings values SetOptionalDefaults(msg); return(msg); }