Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 电子邮件模板引擎_C#_Asp.net_Email_Template Engine - Fatal编程技术网

C# 电子邮件模板引擎

C# 电子邮件模板引擎,c#,asp.net,email,template-engine,C#,Asp.net,Email,Template Engine,我即将为我正在工作的网站(asp.net/c#)编写一个简单的电子邮件管理器;该网站发送各种电子邮件,如帐户创建、新闻、一些用户操作等。因此,将有一些带有占位符的电子邮件模板,如[$FirstName],这些占位符将被实际值替换。相当标准的东西。我只是想知道是否有人可以对现有的代码提出建议——同样,我需要一些非常简单的东西,没有太多的提示,显然是源代码(而且是免费的) 如有任何想法/意见,将不胜感激 谢谢, Andrey如果您使用的是ASP.NET,那么您已经有了一个可用的模板引擎。只需创建一个

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

如有任何想法/意见,将不胜感激

谢谢,
Andrey

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

确保此url不公开

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

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


正则表达式方法的唯一“问题”是,如果必须进行嵌入式模板制作,那么这将需要更多的工作。

我刚刚完成了这项工作,下面有一些非常好的信息:。最棒的是,除了.NET之外,您不需要其他任何东西

本质上,您创建了一个HTML页面(也称为格式化电子邮件),其中包含要替换的标记(在本解决方案中,标记的格式为:)。然后,您可以利用在上述网站上找到的信息创建一个邮件模板,该模板中的标记填充了适当的数据,并且将为您注入HTML模板。然后,您只需使用.NET中内置的SMTP类,在途中发送邮件即可。这是非常简单和直接的


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

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

操作简单,效果良好。当你需要更强大的东西时,你可以使用某种框架,但是string.format对我来说一直都很好

注意


Alison R的链接使用3.5的匿名类型将此方法带到下一步,效果非常好。如果您是3.5版,我建议您使用FormatWith there(我会),否则这种方法效果很好。

关于堆栈溢出,已经有好几个线程了,但我最终根据各种建议推出了自己的解决方案

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

我需要发送的所有电子邮件都有它们自己的子类,这些子类派生自基本类,并定义它们特有的内容,例如TemplateText、BindingData、Recipients和Subject。将它们分别放在自己的类中,使它们非常容易独立于应用程序的其余部分进行单元测试

因此,您的应用程序可以使用这些电子邮件类,而不必真正关心它使用的是哪一个,使用任何共享方法(我唯一关心的是Send())实现一个接口也是一个好主意,这样您的应用程序就可以实例化它想要的任何电子邮件类,并以相同的方式使用它们。也许也可以使用泛型,但这就是我想到的

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

编辑:这里还有很多建议:

虽然这可能很简单,但它并没有将内容和演示分开。而且,既然电子邮件正在被使用,为什么不使用.NET框架已经内置的东西呢?不知道你在说什么。。。{0}是内容,模板是表示。对我来说,这似乎是一个错误的作业工具,您将遇到很多问题,因为Outlook没有呈现.NET framework认为标准的HTML。你必须运行一个完整的页面周期,用更少的代码就可以实现。RazorEngin、Handlebar和SharpTal的一些测试: