У меня было аналогичное требование к одному из проектов, когда вам приходилось отправлять огромное количество писем каждый день, и клиент хотел получить полный контроль над HTML-шаблонами для разных типов писем.
из-за большого количества отправляемых электронных писем, первостепенной проблемой была производительность.
мы получили статический контент на сервере SQL, где вы сохраняете разметку всего HTML-шаблона (вместе с заполнителями, такими как [UserFirstName], [UserLastName], которые заменяются реальными данными во время выполнения) для различных типов электронная почта
затем мы загрузили эти данные в кэш asp.net - поэтому мы не читаем html-шаблоны снова и снова - но только когда они действительно меняются
мы дали клиенту редактор WYSIWYG для изменения этих шаблонов через веб-форму администратора. При каждом обновлении мы сбрасываем кэш asp.net.
и затем у нас была отдельная таблица для журналов электронной почты - где регистрировалось каждое отправляемое письмо. в этой таблице есть поля с именами emailType, emailSent и numberOfTries.
мы просто запускали работу каждые 5 минут для важных типов электронной почты (например, регистрация нового участника, забытый пароль), которые необходимо отправить как можно скорее
каждые 15 минут мы выполняли другую работу для менее важных типов электронной почты (например, для рекламных писем, новостей и т. Д.)
таким образом, вы не блокируете свой сервер, отправляющий электронные письма без остановки, и обрабатываете почту в пакетном режиме. как только письмо отправлено, вы устанавливаете в поле emailSent значение 1.