Вы также можете взглянуть на Smart Code, проект с открытым исходным кодом для генерации кода на основе шаблонов Asp.net.
http://www.codeplex.com/smartcodegenerator
Он интегрирован с Nant и Cassini, поэтому вы можете запустить его из командной строки или из приложения WinForm.
Однако для электронной почты более распространенным является использование простого String.Replace, как вы упомянули выше, но если вам нужно делать циклы и тому подобное, шаблоны могут быть лучше.
Чтобы решить [[ScholarshipList]], который вы упоминаете, без шаблонов asp.net, вы также можете использовать текстовый файл, например:
Hello [[MemberSimpleReplace][FIRSTNAME]],
Here is your ScholarShipList:
[[ScholarShip]]
А затем используйте шаблон метода фабрики для создания правильной фабрики (это псевдокод, так что терпите мои ошибки)
IEmailContentGenerator gen = EmailContentGenFactory.getGenerator("MemberSimpleReplace");
var params = {"FIRSTNAME"};
var stringToSubstitute = gen.Generate(params,context);
var gen2 = EmailContentGenFactory.getGenerator("ScholarShip");
var params2 = {};
var stringToSubstitute2 = gen2.Generate(params2,context);
Затем, когда вы можете легко реализовать новые Генераторы, генераторы получают массив параметров и контекст, который будет иметь UserId и, возможно, некоторые другие значения.
Также помните, что Asp.net - не единственный шаблонный инструмент в .net для генерации HTML, вы можете посмотреть на NVelocity, например, или на множество View Engines для Asp.net MVC.