代码之家  ›  专栏  ›  技术社区  ›  Andrey

电子邮件模板引擎

  •  3
  • Andrey  · 技术社区  · 15 年前

    我将要为我正在工作的站点(ASP.NET/C)编写一个简单的电子邮件管理器;该站点发送各种电子邮件,如帐户创建、新闻、一些用户操作等。因此,将有一些电子邮件模板具有像[$firstname]这样的占位符,这些模板将被实际值替换。相当标准的东西。我只是想知道是否有人可以对现有的代码提出建议-同样,我需要一些非常简单的东西,没有很多提示/口哨,显然还有源代码(和免费的)

    任何想法/评论都将受到高度赞赏!

    谢谢, 安德烈

    4 回复  |  直到 15 年前
        1
  •  5
  •   Community CDub    8 年前

    关于这一点,堆栈上已经有几个线程溢出了,但是我最终从那里的各种建议中总结出了自己的解决方案。

    我用过这个 FormatWith 扩展方法来处理简单的模板化,然后我创建了一个基本的电子邮件基类来处理常见的任务,比如拉入适当的模板并替换所有必需的信息,以及提供send()方法。

    我需要发送的所有电子邮件都有自己的从基础派生的子类,并定义它们特有的内容,如模板文本、绑定数据、收件人和主题。让他们每个人都在自己的类中,使得他们很容易独立于应用程序的其他部分进行单元测试。

    这样,你的应用程序就可以使用这些电子邮件类而不必真正关心它使用的是哪一个,使用任何共享方法(我唯一关心的是send())实现一个接口也是一个好主意,这样你的应用程序就可以实例化它想要的任何电子邮件类,并以同样的方式使用它们。或许也可以使用仿制药,但这正是我想出来的。

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

    编辑:这里还有很多建议: Can I set up HTML/Email Templates with ASP.NET?

        2
  •  1
  •   Hogan    15 年前

    我总是做以下的事情。templates=文本字符串 {#} 占位符。要使用模板,我加载字符串(从任何存储),然后调用 string.Format(template,param1,param2..)

    简单,效果好。当你需要更强大的东西时,你可以移动到某种框架,但string.format对我来说总是很好的。

    笔记

    Alison R的链接将此方法带到下一步,使用3.5的匿名类型,效果非常好。如果你是3.5,我建议你在那里使用格式化(我会的),否则这种方式很好地工作。

        3
  •  0
  •   JasCav    15 年前

    在我自己做了这件事之后,这里有一些很好的信息: Sending Email Both in HTML and Plain Text . 最重要的是,除了.NET,你什么都不需要。

    基本上,您可以创建一个HTML页面(即格式化电子邮件),其中包含要替换的标记(在这种解决方案中,标记的格式为:<%Tagname%>)。然后,利用上面网站上的信息创建一个邮件模板,其中的标签填充了适当的数据,并将为您的HTML模板进行注入。然后,您只需使用.NET中内置的SMTP类,并在邮件发送途中发送邮件。它非常简单明了。

    如果您还有其他问题,请告诉我。希望有帮助!

        4
  •  0
  •   casperOne    15 年前

    如果您使用的是ASP.NET,则 已经 您可以使用模板引擎。只需创建一个ASP.NET页面,它将为您生成所需的结果(使用任何控件等),并将响应的ContentType设置为适当的类型(文本或HTML,具体取决于电子邮件格式)。

    确保 这个网址是 公开曝光。

    然后,在代码中,您将创建一个httpwebrequest/httpwebresponse或webclient,然后获取URL并获取内容。ASP.NET引擎将处理请求并返回格式化的结果,然后可以通过电子邮件发送。

    如果你想要更简单的东西,为什么不使用regex和match呢?只要确保您的字段有一个相当独特的标识符(前缀和后缀,您可以保证永远不会使用,或者至少可以为其编写一个转义序列),并且您可以轻松地使用match方法进行替换。

    对于regex方法来说,唯一的“解决方法”是,如果必须进行嵌入式模板化,那么需要做更多的工作。