当前位置:  开发笔记 > 编程语言 > 正文

我可以使用ASP.NET设置HTML /电子邮件模板吗?

如何解决《我可以使用ASP.NET设置HTML/电子邮件模板吗?》经验,为你挑选了7个好方法。

我正在开发一个会发送大量电子邮件的网站.我想设置页眉和页脚文本,甚至是模板,以便用户在需要时轻松编辑这些电子邮件.

如果我将HTML嵌入到C#字符串文字中,那就很难看了,他们不得不担心转义.包括页眉和页脚的平面文件可能会起作用,但关于它的一些东西感觉不对.

什么是理想的.ASPX是以某种方式使用页面作为模板,然后告诉我的代码服务该页面,并使用为电子邮件返回的HTML.

有这么好的方法吗?有没有更好的方法来解决这个问题?

更新:
我添加了一个答案,使您可以使用标准的.aspx页面作为电子邮件模板.只需像通常那样替换所有变量,使用数据绑定等.然后只需捕获页面的输出,瞧!你有HTML电子邮件!

更新
了CAVEAT !!!:我在一些aspx页面上使用MailDefinition类就好了,但是当在运行的服务器进程中尝试使用这个类时,它失败了.我相信这是因为MailDefinition.CreateMailMessage()方法需要一个有效的控件来引用,即使它并不总是做某事.因此,我建议使用aspx页面的方法,或使用ascx页面的Mun方法,这看起来好一点.



1> Mike Barlow ..:

这里已经有很多答案,但我偶然发现了一篇关于如何将Razor与电子邮件模板结合使用的精彩文章.使用ASP.NET MVC 3推动了Razor,但MVC不需要使用Razor.这是处理电子邮件模板的非常流畅的处理

正如文章所指出的那样,"Razor的最佳之处在于它与其前身(webforms)不同,它与网络环境无关,我们可以轻松地将其托管在网络之外,并将其用作各种用途的模板引擎."

使用RazorEngine生成HTML电子邮件 - 第01部分 - 简介

利用ASP.NET之外的Razor模板:它们不仅仅适用于HTML了!

使用RazorEngine在ASP.NET中实现更智能的电子邮件模板

类似Stackoverflow QA

使用新的RazorEngine API进行模板化

使用没有MVC的Razor

是否可以在asp.net外部使用Razor View Engine



2> Mun..:

您可能还想尝试加载控件,然后将其呈现为字符串并将其设置为HTML正文:

// Declare stringbuilder to render control to
StringBuilder sb = new StringBuilder();

// Load the control
UserControl ctrl = (UserControl) LoadControl("~/Controls/UserControl.ascx");

// Do stuff with ctrl here

// Render the control into the stringbuilder
StringWriter sw = new StringWriter(sb);
Html32TextWriter htw = new Html32TextWriter(sw);
ctrl.RenderControl(htw);

// Get full body text
string body = sb.ToString();

然后,您可以照常构建您的电子邮件:

MailMessage message = new MailMessage();
message.From = new MailAddress("from@email.com", "from name");
message.Subject = "Email Subject";
message.Body = body;
message.BodyEncoding = Encoding.ASCII;
message.IsBodyHtml = true;

SmtpClient smtp = new SmtpClient("server");
smtp.Send(message);

用户控件可以包含其他控件,例如页眉和页脚,还可以利用数据绑定等功能.


该示例没有解释代码所在的位置,是一个页面吗?因为LoadControl是一个页面/控件方法.

3> John Sheehan..:

您可以尝试MailDefinition类


我只想指出这对于基本的电子邮件很有用,但不是很复杂.MailDefinition类不支持数据绑定.它唯一真正做的是提供字符串替换.虽然,它也内置于会员帐户创建向导中.
MailDefinition类必须获取一个Control来呈现模板化内容..不太好.

4> Canavar..:

如果您想传递用户名,产品名称等信息,您可以使用开源模板引擎NVelocity来生成最终的电子邮件/ HTML.

NVelocity模板(MailTemplate.vm)的一个示例:

A sample email template by $name.

Foreach example :
#foreach ($item in $itemList) [Date: $item.Date] Name: $item.Name, Value: $itemValue.Value

#end

在应用程序中通过MailTemplate.vm生成邮件正文:

VelocityContext context = new VelocityContext();
context.Put("name", "ScarletGarden");
context.Put("itemList", itemList);

StringWriter writer = new StringWriter();

Velocity.MergeTemplate("MailTemplate.vm", context, writer);

string mailBody = writer.GetStringBuilder().ToString();

结果邮件正文是:

ScarletGarden的示例电子邮件模板 .

Foreach示例:

[日期:2009年12月12日]姓名:第1项,价值:09

[日期:2009年2月21日]姓名:第4项,价值:52

[日期:01.03.2009]姓名:第2项,价值:21

[日期:2009年3月23日]姓名:第6项,价值:24

要编辑模板,您可以使用FCKEditor并将模板保存到文件中.



5> Pawel Lesnik..:

Mail.dll电子邮件组件包括电子邮件模板引擎

这是语法概述:



Hi {FirstName} {LastName},

Here are your orders: 
{foreach Orders}
    Order '{Name}' sent to {Street}. 
{end}



加载模板的代码填充c#对象的数据并发送电子邮件:

Mail.Html(Template
              .FromFile("template.txt")
              .DataFrom(_contact)
              .Render())
    .Text("This is text version of the message.")
    .From(new MailBox("alice@mail.com", "Alice"))
    .To(new MailBox("bob@mail.com", "Bob"))
    .Subject("Your order")
    .UsingNewSmtp()
    .WithCredentials("alice@mail.com", "password")
    .Server("mail.com")
    .WithSSL()
    .Send();

您可以获得有关电子邮件模板引擎博客帖子的更多信息

或者只是下载Mail.dll电子邮件组件并尝试一下.

请注意,这是我创建的商业产品.



6> Everton..:

如果灵活性是您的先决条件之一,那么XSLT可能是一个不错的选择,.NET框架完全支持它,您甚至可以让用户编辑这些文件.本文(http://www.aspfree.com/c/a/XML/XSL-Transformations-using-ASP-NET/)可能对一开始很有用(msdn有更多关于它的信息).正如ScarletGarden所说,NVelocity是另一个不错的选择,但我更喜欢XSLT的"内置".NET框架支持和平台无关.



7> John Bubrisk..:

我认为您也可以这样做:

创建和.aspx页,并将其放在OnLoad方法的末尾,或手动调用它。

    StringBuilder sb = new StringBuilder();
    StringWriter sw = new StringWriter(sb);
    HtmlTextWriter htmlTW = new HtmlTextWriter(sw);
    this.Render(htmlTW);

我不确定是否有任何潜在的问题,但看起来可行。这样,您可以使用功能齐全的.aspx页,而不是仅支持文本替换的MailDefinition类。

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有