代码之家  ›  专栏  ›  技术社区  ›  Al W

是否有方法将.aspx页面用作从winform应用程序发送的电子邮件的模板?

  •  1
  • Al W  · 技术社区  · 17 年前

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

    理想情况下,至少在我看来,这些电子邮件模板应该是自包含的.aspx页面。并且将以类似于以下方式从我们的winform电子邮件应用程序中调用

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

    http://www.west-wind.com/presentations/aspnetruntime/aspnetruntime.asp

    3 回复  |  直到 16 年前
        1
  •  2
  •   Jim W    15 年前

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

    如果您将模板托管在Web服务中,然后从应用程序调用它们。

        2
  •  0
  •   Surgical Coder    17 年前

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

        3
  •  0
  •   Guillaume Gros    16 年前

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

    http://www.codeplex.com/smartcodegenerator

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

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

    要解决您提到的没有asp.net模板的[[SolarshipList]]问题,您还可以使用以下文本文件:

    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,可能还有其他一些值。

    推荐文章