Механизм шаблонов электронной почты
Я собираюсь написать простой менеджер электронной почты для сайта, над которым я работаю (asp.net/c#); сайт рассылает различные электронные письма, например, о создании учетной записи, новостях, некоторых пользовательских действиях и т. д. Поэтому будут некоторые шаблоны электронной почты с заполнителями, такими как [$FirstName], которые будут заменены фактическими значениями. Довольно стандартные вещи. Мне просто интересно, если кто-то может посоветовать существующий код - опять же, мне нужно что-то очень простое, без многих наворотов, и, конечно, с исходным кодом (и бесплатно)
Любые идеи / комментарии будут высоко оценены!
Спасибо андрей
4 ответа
Об этом уже есть несколько тем в Stack Overflow, но я закончил тем, что применил собственное решение на основе различных предложений.
Я использовал этот метод расширения FormatWith, чтобы позаботиться о простых шаблонах, а затем я создал базовый базовый класс Email для решения общих задач, таких как получение соответствующего шаблона и замена всей необходимой информации, а также предоставление Send(). метод.
Все электронные письма, которые мне нужно отправить, имеют собственный подкласс, происходящий из базы, и определяют уникальные для них вещи, такие как TemplateText, BindingData, Recipients и Subject. Наличие каждого в своем классе делает их очень легкими для модульного тестирования независимо от остальной части приложения.
Чтобы ваше приложение могло работать с этими классами электронной почты, не заботясь о том, какой из них он использует, это также хорошая идея - реализовать интерфейс с любыми общими методами (единственное, что меня заботило, это Send()), так что ваше приложение может создавать экземпляры любого класса электронной почты и работать с ними таким же образом. Возможно, можно использовать и дженерики, но это было то, что я придумал.
IEmail email = new MyEmailClass();
email.Send();
Изменить: Есть много других предложений здесь: Могу ли я настроить шаблоны HTML/ электронной почты с ASP.NET?
Я всегда делаю следующее. Шаблоны = текстовая строка с {#}
заполнители. Чтобы использовать шаблон, я загружаю строку (из любого магазина), а затем вызываю string.Format(template,param1,param2..)
Просто и хорошо работает. Когда вам нужно что-то более сильное, вы можете перейти к какой-то структуре, но string.format всегда работал хорошо для меня.
нота
Ссылка Элисон Р. выводит этот метод к следующему шагу, используя анонимные типы 3.5 с большим эффектом. Если вам 3,5, я рекомендую использовать FormatWith там (я буду), в противном случае этот способ работает хорошо.
Только что сделав это сам, есть некоторая отличная информация по адресу: Отправка электронной почты как в HTML, так и в виде обычного текста. Самое приятное, что вам не нужно ничего, кроме.NET.
По сути, вы создаете HTML-страницу (AKA, ваше отформатированное электронное письмо) с тегами, которые вы хотите заменить (в случае этого решения теги будут иметь формат: <% TAGNAME%>). Затем вы используете информацию, найденную на вышеуказанном веб-сайте, для создания почтового шаблона с тегами, заполненными соответствующими данными, и вам будут сделаны инъекции в ваш HTML-шаблон. Затем вы просто используете классы SMTP, встроенные в.NET, и отправляете почту в пути. Это очень просто и понятно.
Дайте мне знать, если у вас есть дополнительные вопросы. Надеюсь, это поможет!
Если вы используете ASP.NET, у вас уже есть доступный движок шаблонов. Просто создайте страницу ASP.NET, которая будет выдавать результаты для вас (используя любые элементы управления, и т. Д. И т. Д.), А также установите ContentType ответа на соответствующий тип (текст или HTML, в зависимости от формата электронной почты).)
Убедитесь, что этот URL не является публично доступным.
Затем в своем коде вы должны создать HttpWebRequest / HttpWebResponse или WebClient, а затем получить URL-адрес и получить содержимое. Движок ASP.NET обработает запрос и вернет отформатированные результаты, которые вы можете отправить по электронной почте.
Если вы хотите что-то более простое, почему бы не использовать RegEx и соответствовать? Просто убедитесь, что у вас есть довольно уникальный идентификатор для ваших полей (префикс и суффикс, который, как вы можете гарантировать, никогда не будет использоваться, или, по крайней мере, вы можете написать для него escape-последовательность), и вы можете легко использовать метод Match для выполнения заменить.
Единственный "уловок" подхода RegEx заключается в том, что если вам нужно внедрить встроенные шаблоны, то это потребует немного больше работы.