Есть ли способ использовать страницы .aspx в качестве шаблонов для электронных писем, отправляемых из приложения winform? - PullRequest
1 голос
/ 04 июня 2009

ASP.NET отлично подходит для создания HTML. Мы отправляем много html-сообщений электронной почты. В прошлом мы загружали шаблоны .html с ключевыми строками, которые были заменены, чтобы сделать электронную почту более индивидуальной (т. Е. [[FirstName]] будет заменено на «Джон Доу»). Однако по мере того, как мы добавляем все больше и больше почтовых кампаний, логика настройки электронной почты начинает выходить из-под контроля. Вместо простой замены строки [[FirstName]] перед нами стоит что-то вроде [[ScholarshipList]], где ScholarshipList отличается для каждого пользователя, которому мы отправляем электронное письмо.

В идеале, по крайней мере, на мой взгляд, эти шаблоны электронной почты должны быть автономными .aspx-страницами. И будет вызываться из нашего приложения winform emailer способом, подобным

IEmailTemplate template = EmailTemplates.Load("ScholarshipList.aspx");
template.UserID=1234;
string emailMessage = template.Render();

Тогда страница ScholarshipList.aspx будет выглядеть аналогично любой другой странице asp.net в том смысле, что на ней могут быть элементы управления сервером, сценарии runat = "server" и привязка данных.

Я видел эту статью http://www.west -wind.com / Presentations / aspnetruntime / aspnetruntime.asp , которая выглядит многообещающей. Кто-нибудь использовал это раньше? Он использует некоторое удаленное взаимодействие, которого в идеале следует избегать, и имеет ограниченные механизмы обработки ошибок. Я думал, что получу еще какие-то отзывы, прежде чем я уйду далеко по этому пути.

Ответы [ 3 ]

2 голосов
/ 04 июня 2009

Вы также можете попробовать этот подход. http://jamesewelch.com/2008/07/11/how-to-render-a-aspnet-user-control-within-a-web-service-and-return-the-generated-html/

Если вы разместили свои шаблоны в веб-сервисе, а затем вызвали их из своего приложения.

0 голосов
/ 24 июня 2009

Вы также можете взглянуть на Smart Code, проект с открытым исходным кодом для генерации кода на основе шаблонов Asp.net.

http://www.codeplex.com/smartcodegenerator

Он интегрирован с Nant и Cassini, поэтому вы можете запустить его из командной строки или из приложения WinForm.

Однако для электронной почты более распространенным является использование простого String.Replace, как вы упомянули выше, но если вам нужно делать циклы и тому подобное, шаблоны могут быть лучше.

Чтобы решить [[ScholarshipList]], который вы упоминаете, без шаблонов asp.net, вы также можете использовать текстовый файл, например:

Hello [[MemberSimpleReplace][FIRSTNAME]],
Here is your ScholarShipList:
[[ScholarShip]]

А затем используйте шаблон метода фабрики для создания правильной фабрики (это псевдокод, так что терпите мои ошибки)

IEmailContentGenerator gen = EmailContentGenFactory.getGenerator("MemberSimpleReplace");
var params = {"FIRSTNAME"};
var stringToSubstitute = gen.Generate(params,context);
var gen2 = EmailContentGenFactory.getGenerator("ScholarShip");
var params2 = {};
var stringToSubstitute2 = gen2.Generate(params2,context);

Затем, когда вы можете легко реализовать новые Генераторы, генераторы получают массив параметров и контекст, который будет иметь UserId и, возможно, некоторые другие значения.

Также помните, что Asp.net - не единственный шаблонный инструмент в .net для генерации HTML, вы можете посмотреть на NVelocity, например, или на множество View Engines для Asp.net MVC.

0 голосов
/ 05 июня 2009

Быстрый и грязный способ сделать это - сделать запрос HttpWebRequest к URL-адресу, получить вывод и использовать его, но это не так хорошо, как anser от David ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...