Механизм шаблонов электронной почты - PullRequest
3 голосов
/ 19 февраля 2010

Я собираюсь написать простой менеджер электронной почты для сайта, над которым я работаю (asp.net/c#); сайт рассылает различные электронные письма, например, о создании учетной записи, новостях, некоторых пользовательских действиях и т. д. Поэтому будут некоторые шаблоны электронной почты с заполнителями, такими как [$ FirstName], которые будут заменены фактическими значениями. Довольно стандартные вещи. Мне просто интересно, если кто-то может посоветовать существующий код - опять же, мне нужно что-то очень простое, без многих наворотов и, конечно, с исходным кодом (и бесплатно)

Любые идеи / комментарии будут высоко оценены!

Спасибо, Андрей

Ответы [ 4 ]

5 голосов
/ 19 февраля 2010

В Stack Overflow уже есть несколько тем об этом, но я закончил тем, что катал свое собственное решение из различных предложений.

Я использовал этот FormatWith метод расширения, чтобы позаботиться о простых шаблонах, а затем я создал базовый базовый класс Email для решения общих задач, таких как получение соответствующего шаблона и замена всей необходимой информации , а также предоставив метод Send ().

Все электронные письма, которые мне нужно отправить, имеют собственный подкласс, производный от базы, и определяют уникальные для них вещи, такие как TemplateText, BindingData, Recipients и Subject. Наличие каждого из них в своем классе делает их очень легкими для модульного тестирования независимо от остальной части приложения.

Чтобы ваше приложение могло работать с этими классами электронной почты, не заботясь о том, какой из них он использует, это также хорошая идея - реализовать интерфейс с любыми общими методами (единственным, что меня беспокоило, был Send ()), так что Ваше приложение может создавать экземпляры любого класса электронной почты и работать с ними таким же образом. Возможно, можно использовать и дженерики, но это было то, что я придумал.

IEmail email = new MyEmailClass();
email.Send();

Редактировать: здесь есть еще много предложений: Можно ли настроить шаблоны HTML / электронной почты с ASP.NET?

1 голос
/ 19 февраля 2010

Я всегда делаю следующее. Шаблоны = текстовая строка с {#} заполнителями. Чтобы использовать шаблон, я загружаю строку (из любого магазина) и затем вызываю string.Format(template,param1,param2..)

Просто и хорошо работает. Когда вам нужно что-то более сильное, вы можете перейти на какую-то платформу, но string.format всегда хорошо работал для меня.

примечание

Ссылка Элисон R выводит этот метод на следующий шаг, используя анонимные типы 3.5 с большим эффектом. Если вам 3,5, я рекомендую использовать FormatWith там (я буду), иначе этот способ работает хорошо.

0 голосов
/ 19 февраля 2010

Только что сделав это сам, есть отличная информация по адресу: Отправка электронной почты как в HTML, так и в обычном тексте . Самое приятное, что вам не нужно ничего, кроме .NET.

По сути, вы создаете страницу HTML (AKA, ваше отформатированное электронное письмо) с тегами, которые вы хотите заменить (в случае этого решения теги будут иметь формат: <% TAGNAME%>). Затем вы используете информацию, найденную на вышеуказанном веб-сайте, для создания почтового шаблона с тегами, заполненными соответствующими данными, и вам будут сделаны инъекции в ваш HTML-шаблон. Затем вы просто используете классы SMTP, встроенные в .NET, и отправляете почту в пути. Это очень просто и понятно.

Дайте мне знать, если у вас есть дополнительные вопросы. Надеюсь, это поможет!

0 голосов
/ 19 февраля 2010

Если вы используете ASP.NET, у вас уже есть доступный движок шаблонов.Просто создайте страницу ASP.NET, которая будет производить результаты для вас (используя любые элементы управления, и т. Д. И т. Д.), А также установите ContentType ответа для соответствующего типа (текстового или HTML, в зависимости от формата электронной почты).)

Убедитесь, , что этот URL не публично доступен.

Затем в своем коде вы создадите HttpWebRequest / HttpWebResponse или WebClientа затем получить URL-адрес и получить содержимое.Движок ASP.NET обработает запрос и вернет отформатированные результаты, которые вы можете отправить по электронной почте.

Если вы хотите что-то более простое, почему бы не использовать RegEx и сопоставить?Просто убедитесь, что у вас есть довольно уникальный идентификатор для ваших полей (префикс и суффикс, который, как вы можете гарантировать, никогда не будет использоваться, или, по крайней мере, вы можете написать для него escape-последовательность), и вы можете легко использовать метод Match для выполнениязаменить.

Единственный «уловок» подхода RegEx заключается в том, что если вам нужно внедрить встроенные шаблоны, то это потребует немного больше работы.

...