Есть встроенный WebControl, System.Web.UI.WebControls.MailDefinition , который заменяет строки (среди прочего). Жаль, что они тесно связали его с настройками Smtp в app.config и веб-элементом управления, а затем сделали его запечатанным для предотвращения наследования.
Но он обрабатывает несколько вещей, которые вам, скорее всего, понадобятся в механизме почтовых шаблонов - основной текст из файла, html-почта, встроенные объекты и т. Д. Reflector показывает, что фактическая замена обрабатывается циклом foreach и Regex .Заменить - мне это тоже кажется разумным выбором.
Быстрый просмотр показывает, что если вы можете жить с адресом from, находящимся в 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 и поразмышляйте о свойствах.