我在一个网站上工作,将发出大量的电子邮件。我想同时设置页眉和页脚文本,或者甚至模板,以允许用户轻松编辑这些电子邮件,如果他们需要。
如果我把超文本标记语言嵌入到C#字符串字面量中,那就很难看了,他们会担心转义的问题。在页眉和页脚中包含平面文件可能会起作用,但其中的某些内容感觉不太对劲。
最好是以某种方式使用.ASPX
页面作为模板,然后告诉我的代码为该页面提供服务,并使用为电子邮件返回的超文本标记语言。
有没有一种既好又简单的方法可以做到这一点?有没有更好的方法来解决这个问题?
更新:
我添加了一个答案,使您可以使用标准.aspx页面作为电子邮件模板。只需像往常一样替换所有变量,使用数据绑定等,然后捕获页面的输出,瞧!您有您的HTML电子邮件!
使用警告更新了!:
我在一些aspx页面上使用MailDefinition类还不错,但是当尝试在运行的服务器进程中使用这个类时,它失败了。我相信这是因为MailDefinition.CreateMailMessage()方法需要一个有效的控件来引用,尽管它并不总是做一些事情。正因为如此,我会推荐我的方法使用aspx页面,或者Mun的方法使用ascx页面,这似乎更好一些。
发布于 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
发布于 2009-03-06 20:51:16
您可能还想尝试加载一个控件,然后将其呈现为字符串并将其设置为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);
您的用户控件可以包含其他控件,如页眉和页脚,还可以利用数据绑定等功能。
发布于 2009-03-06 20:34:06
你可以试试MailDefinition class
https://stackoverflow.com/questions/620265
复制相似问题