Там есть встроенный WebControl, System.Web.UI.WebControls.MailDefinition, что делает string replacements (среди прочего). Жаль, что они плотно связали его с настройками Smtp в app.config и веб-элементом управления, а затем сделали его запечатанным для наследования фольги.
Но он обрабатывает несколько вещей, которые, скорее всего, понадобятся в механизме почтового шаблона - основной текст из файла, html-адрес электронной почты, встроенные объекты и т. Д. Отражатель показывает, что фактическая замена обрабатывается с помощью цикла foreach и Regex.Replace - что кажется мне разумным выбором.
Быстрый просмотр показывает, что если вы можете жить с адресом, указанным в app.config (после этого вы можете изменить его на возвращаемом MailMessage), вам нужен только элемент управления владельца для встроенных ресурсов или BodyFileName.
Если вы используете ASP.NET или можете жить с ограничениями - я бы выбрал MailDefinition. В противном случае просто сделайте foreach над словарем и Regex.Replace. Это небольшая голодающая память из-за повторяющихся распределений тела - но они недолговечны и не должны представлять большую часть проблемы.
var replacements = new Dictionary<string, object>() {
{ "Property1", obj.Property1 },
{ "Property2", obj.Property2 },
{ "Property3", obj.Property3 },
{ "Property4", obj.Property4 },
}
foreach (KeyValuePair<string, object> kvp in replacement) {
body = Regex.Replace(body, kvp.Key, kvp.Value.ToString());
}
Если у вас действительно есть много свойств, а затем прочитать ваше тело сначала Regex.Match и отражать в свойствах вместо этого.