首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我能用ASP.NET设置超文本标记语言/电子邮件模板吗?

我能用ASP.NET设置超文本标记语言/电子邮件模板吗?
EN

Stack Overflow用户
提问于 2009-03-06 20:21:11
回答 24查看 140.5K关注 0票数 99

我在一个网站上工作,将发出大量的电子邮件。我想同时设置页眉和页脚文本,或者甚至模板,以允许用户轻松编辑这些电子邮件,如果他们需要。

如果我把超文本标记语言嵌入到C#字符串字面量中,那就很难看了,他们会担心转义的问题。在页眉和页脚中包含平面文件可能会起作用,但其中的某些内容感觉不太对劲。

最好是以某种方式使用.ASPX页面作为模板,然后告诉我的代码为该页面提供服务,并使用为电子邮件返回的超文本标记语言。

有没有一种既好又简单的方法可以做到这一点?有没有更好的方法来解决这个问题?

更新:

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

使用警告更新了!:

我在一些aspx页面上使用MailDefinition类还不错,但是当尝试在运行的服务器进程中使用这个类时,它失败了。我相信这是因为MailDefinition.CreateMailMessage()方法需要一个有效的控件来引用,尽管它并不总是做一些事情。正因为如此,我会推荐我的方法使用aspx页面,或者Mun的方法使用ascx页面,这似乎更好一些。

EN

回答 24

Stack Overflow用户

回答已采纳

发布于 2011-02-24 14:48:55

这里已经有了大量的答案,但我偶然发现了一篇关于如何将Razor与电子邮件模板结合使用的很好的文章。Razor是使用MVC MVC3推送的,但ASP.NET不需要使用Razor。这是一个非常巧妙的处理电子邮件模板的过程

正如这篇文章所指出的,“Razor最好的地方在于它不像它的前身(Webforms)那样与web环境捆绑在一起,我们可以很容易地将它托管在web之外,并将其用作各种用途的模板引擎。”

Generating HTML emails with RazorEngine - Part 01 - Introduction

Leveraging Razor Templates Outside of ASP.NET: They’re Not Just for HTML Anymore!

Smarter email templates in ASP.NET with RazorEngine

类似堆栈溢出QA

Templating using new RazorEngine API

Using Razor without MVC

Is it possible to use Razor View Engine outside asp.net

票数 73
EN

Stack Overflow用户

发布于 2009-03-06 20:51:16

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

代码语言:javascript
复制
// 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();

然后你可以像往常一样构造你的电子邮件:

代码语言:javascript
复制
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);

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

票数 55
EN

Stack Overflow用户

发布于 2009-03-06 20:34:06

你可以试试MailDefinition class

票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/620265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档