有没有办法使用.aspx页面作为从winform应用程序发送的电子邮件的模板?

时间:2009-06-03 20:32:25

标签: c# asp.net winforms email

ASP.NET非常适合创建html。我们发送了很多HTML电子邮件。在过去,我们一直在加载.html模板,其中包含被替换的关键字符串,以使电子邮件更加自定义(即。[[FirstName]]将替换为“John Doe”)。然而,随着我们添加越来越多的电子邮件广告系列,自定义电子邮件的逻辑开始失控。而不是简单的[[FirstName]]字符串替换,我们的任务是[[ScholarshipList]],其中ScholarshipList对于我们发送电子邮件的每个用户都是不同的。

理想情况下,至少在我看来,这些电子邮件模板将是自包含的.aspx页面。并且将以类似于

的方式从我们的winform电子邮件应用程序中调用
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 个答案:

答案 0 :(得分:2)

您也可以尝试这种方法。 http://jamesewelch.com/2008/07/11/how-to-render-a-aspnet-user-control-within-a-web-service-and-return-the-generated-html/

如果您将模板托管在网络服务中,然后从您的应用中调用它们。

答案 1 :(得分:0)

快速而肮脏的方法是对网址执行HttpWebRequest并获取输出并使用它,但这不如David的anser那么好......

答案 2 :(得分:0)

您还可以查看智能代码,这是一个基于Asp.net模板的代码生成的开源项目。

http://www.codeplex.com/smartcodegenerator

它与Nant和Cassini集成,因此您可以从命令行或WinForm应用程序运行它。

但是对于电子邮件,使用像上面提到的简单的String.Replace更常见但是如果你需要做循环之类的话,那么模板可能会更好。

要解决您在没有asp.net模板时提及的[[ScholarshipList]],您还可以使用如下文本文件:

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,例如Asp.net MVC的许多View Engines。