我即将为我正在处理的网站编写一个简单的电子邮件管理器(asp.net/c#);该网站发送各种电子邮件,如帐户创建,新闻,一些用户操作等。因此,将有一些电子邮件模板与[$ FirstName]占位符将被实际值替换。很标准的东西。我只是想知道是否有人可以就现有代码提出建议 - 再次,我需要一些非常简单的东西,没有很多铃声/口哨,显然有源代码(和免费)
任何想法/评论都将受到高度赞赏!
谢谢, 安德烈
答案 0 :(得分:5)
Stack Overflow上有几个关于此的线程,但我最终在那里提出了各种建议。
我使用这个FormatWith扩展方法来处理简单的模板,然后我创建了一个基本的电子邮件基类来处理常见任务,比如拉入适当的模板并替换所有必需的信息,如以及提供Send()方法。
我需要发送的所有电子邮件都有自己的子类派生自子类,并定义它们唯一的东西,如TemplateText,BindingData,Recipients和Subject。将它们各自放在自己的类中使得它们非常容易与应用程序的其余部分进行单元测试。
因此,您的应用程序可以使用这些电子邮件类而无需关心它正在使用哪一个,使用任何共享方法(我唯一关心的是Send())实现接口也是一个好主意,所以您的应用可以实例化它想要的任何电子邮件类,并以相同的方式使用它们。也许也可以使用泛型,但这就是我想出来的。
IEmail email = new MyEmailClass();
email.Send();
修改:此处还有更多建议:Can I set up HTML/Email Templates with ASP.NET?
答案 1 :(得分:1)
我总是这样做。 Templates =包含{#}
占位符的文本字符串。要使用模板,我加载字符串(从任何商店),然后调用string.Format(template,param1,param2..)
简单而且运作良好。当你需要更强大的东西时,你可以移动到某种类型的框架,但string.format对我来说一直很好。
注意强>
Alison R的链接使用3.5的匿名类型将此方法用于下一步,效果很好。如果你是3.5我建议在那里使用FormatWith(我会),否则这种方式效果很好。
答案 2 :(得分:0)
如果您使用的是ASP.NET,那么已经可以使用模板引擎。只需创建一个ASP.NET页面,它将为您生成所需的结果(使用任何控件等),并将响应的ContentType设置为适当的类型(文本或HTML,具体取决于电子邮件格式) )
确保此网址不公开曝光。
然后,在您的代码中,您将创建一个HttpWebRequest / HttpWebResponse或WebClient,然后获取URL并获取内容。 ASP.NET引擎将处理请求并返回您的格式化结果,然后您可以通过电子邮件发送。
如果您想要更简单的东西,为什么不使用RegEx并匹配?只要确保你的字段有一个相当独特的标识符(前缀和后缀,你可以保证永远不会使用它,或者你至少可以为它编写一个转义序列),你可以很容易地使用Match方法来完成取代
RegEx方法的唯一“问题”是,如果你必须进行嵌入式模板化,那么这将需要更多的工作。
答案 3 :(得分:0)
我自己刚刚完成了这项工作,其中有一些很好的信息:Sending Email Both in HTML and Plain Text。最重要的是,除了.NET之外,你不需要任何其他东西。
基本上,您使用要替换的标记创建HTML页面(AKA,您的格式化电子邮件)(在此解决方案的情况下,标记的格式为:<%TAGNAME%> )。然后,您可以利用上述网站上的信息创建一个邮件模板,其中包含填充了相应数据的标签,然后将在您的HTML模板中完成注入。然后,您只需使用.NET中内置的SMTP类并在其路上发送邮件。它非常简单明了。
如果您有任何其他问题,请与我们联系。希望有所帮助!