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