У нас было такое требование 4-5 лет назад, а затем мы решили пойти с обычным самодельным решением. Вот схема решения, которое может вам помочь:
- Используйте текстовое поле с расширенными возможностями для создания почтового шаблона (пользователи могут создавать свои собственные письма). Используйте специальный синтаксис для вставки заполнителей для ваших данных в шаблон. Итак, у вас есть html-тело, содержащее заполнители.
- Когда необходимо создать почтовые сообщения для N записей, для каждой записи проанализируйте шаблон html для поиска заполнителей (можно сделать с использованием reg-ex) и замените их соответствующими данными.
- Сгенерированный HTML можно по электронной почте (или он может быть преобразован в PDF-файл или слово с использованием библиотек)
В действительности, это может означать много работы на основе фактических потребностей. Например, в нашем случае
- У нас есть репозиторий метаданных, который описывает бизнес-объекты и их атрибуты
- GUI для конечных пользователей, чтобы определить шаблон. Пользовательский интерфейс позволяет создавать шаблоны с несколькими частями (например, если вам нужно отправить сопроводительное письмо с вложениями), вставка различных заполнителей (мы поддерживаем поля, группы объектов, простую фильтрацию и т. Д.), Формат для части (html/pdf/doc), подробности о получатели электронной почты/факса (с точки зрения метаданных)
- Поддержка группировки сущностей - по сути, это способность имеет дочерние данные. Например, для печати письма о заказе вам нужно поставить таблицу для позиций (продуктов), заказанных в заказе. Там может быть любой уровень такого гнездования.
- Чтобы быть эффективным, существует среда выполнения, которая анализирует содержимое шаблона только один раз, а затем выполняет только замену. У нас также есть механизм запросов, который преобразует заполнители метаданных в запрос для извлечения данных и т. Д.
Было бы здорово, если бы какой-либо готовый инструмент для такой вещи, но, как таковой, я ничего не знаю.
EDIT: Все вышеприведенное релевантно, если ваши требования состоят в том, чтобы определить пользовательские шаблоны писем. Если у вас есть только предопределенный набор шаблонов, тогда решение может быть намного проще - например, (как указал Ив), используя aspx-файлы с выражениями привязки данных, чтобы получить тело html/xml, а затем преобразовать его в соответствующий формат. Затем вы можете использовать HttpServerUtility.Execute для захвата вывода страницы для любого количества записей.
Вы можете использовать страницу aspx для визуализации xml. Просто установите тип содержимого в правильный формат. –
Проверьте это: ntemplates.codeplex.com –