是否有更好的方法在C#中生成HTML电子邮件(通过System.Net.Mail发送),而不是使用Stringbuilder执行以下操作:
string userName = "John Doe";
StringBuilder mailBody = new StringBuilder();
mailBody.AppendFormat("<h1>Heading Here</h1>");
mailBody.AppendFormat("Dear {0}," userName);
mailBody.AppendFormat("<br />");
mailBody.AppendFormat("<p>First part of the email body goes here</p>");
Run Code Online (Sandbox Code Playgroud)
等等等等?
如果我看Razor视图引擎,然后我看到一个非常漂亮和简洁的语法并不特别依赖于生成HTML.所以我想,这将是多么容易使用在发动机外部asp.net中的一个"正常"的.NET环境,例如生成文本,代码,...
欢迎使用任何指针,示例,注释或解释.
前一段时间渲染模板RazorEngine就像以下一样简单:
string s = RazorEngine.Razor.Parse()
Run Code Online (Sandbox Code Playgroud)
但是,出于某种原因,它的作者改变了对API的看法,现在渲染模板的最简单方法是:
var key = new RazorEngine.Templating.NameOnlyTemplateKey("EmailTemplate", RazorEngine.Templating.ResolveType.Global, null);
RazorEngine.Engine.Razor.AddTemplate(key, new RazorEngine.Templating.LoadedTemplateSource("Ala ma kota"));
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
RazorEngine.Engine.Razor.RunCompile(key, sw);
string s = sb.ToString();
Run Code Online (Sandbox Code Playgroud)
(至少这是我从新API中推断出来的.旧的标记为已弃用.)有没有办法使用新的API来渲染模板而不需要缓存,键和其他花哨的东西?所有官方的例子根本不起作用.
我需要向用户发送电子邮件通知,我需要允许管理员为邮件正文(也可能是标题)提供模板.
我喜欢这样的东西string.Format允许我给出命名的替换字符串,所以模板看起来像这样:
Dear {User},
Your job finished at {FinishTime} and your file is available for download at {FileURL}.
Regards,
--
{Signature}
Run Code Online (Sandbox Code Playgroud)
对我来说最简单的方法是什么?
我需要将模板与数据合并以在运行时创建唯一的字符串.有人建议我查看ASP.NET MVC 3 中的Razor模板视图引擎.看起来很棒,但我需要在MVC视图创建之外使用它.
我知道我可以直接使用核心Razor引擎,但我也发现了一些使Razor更容易使用的项目.喜欢:
有没有人有任何关于在MVC之外使用Razor作为独立模板引擎的指导?有这些包装项目的经验吗?我应该研究其他Razor托管实现吗?
我有一个Web内容表单,需要访问内容面板中的控件.我知道有两种访问控件的方法:
TextBox txt = (TextBox)Page.Controls[0].Controls[3].Controls[48].Controls[6]还有其他更简单的方法,因为Page.FindControl在这种情况下不起作用.我问的原因是我感觉像Page对象或Content Panel对象应该有一个方法来查找子控件,但找不到类似的东西.
在我的Web项目的业务对象编辑器页面中,我在对象插入或更新后向管理员发送通知电子邮件.但是,我想发送另一个aspx页面(Notification.aspx)的html输出而不是发送纯文本邮件,我只是为此目的而准备.
首先我想,我可以创建一个Notification.aspx的实例,然后使用它的RenderControl方法来获取输出.
但是,在Editor.aspx页面的代码隐藏中,我甚至无法达到Notification的创建新实例的引用.
我想知道在另一个页面中加载和呈现页面的最佳实践是什么...
谢谢.
我正在尝试创建一个可以作为电子邮件发送的用户控件模板.
在实用程序类中,我有一个包含此代码的方法:
StringBuilder sb = new StringBuilder();
Page p = new Page();
UserControl ctrl = (UserControl)p.LoadControl("~/EmailTemplates/OrderConfirmation.ascx");
StringWriter sw = new StringWriter(sb);
Html32TextWriter htw = new Html32TextWriter(sw);
ctrl.RenderControl(htw);
Run Code Online (Sandbox Code Playgroud)
这正确地写入了用户控件文本,但是如果我想在控件页面内使用服务器控件(例如listview),则永远不会评估列表视图.似乎只评估内联代码块.我怎么能绕过这个?
我即将为我正在处理的网站编写一个简单的电子邮件管理器(asp.net/c#); 该网站发送各种电子邮件,如帐户创建,新闻,一些用户操作等.因此,将有一些电子邮件模板与[$ FirstName]占位符将被实际值替换.很标准的东西.我只是想知道是否有人可以就现有代码提出建议 - 再次,我需要一些非常简单的东西,没有很多铃声/口哨,显然有源代码(和免费)
任何想法/意见将受到高度赞赏!
谢谢,安德烈
我想使用HTML模板发送HTML电子邮件.我想从该HTML模板中替换一些值.知道怎么做到这一点?
我正在处理需要大量字符串操作的任务,例如:
string result =
String.Format("template text {0}, {1}, ... {150}", arg1, arg2, ... ,arg150);
Run Code Online (Sandbox Code Playgroud)
由于参数数量众多,这种感觉并不优雅,我担心参数顺序会出错.
ASP.NET样式模板(即template text <%= arg1 %>, <%= arg2 %>,会很好,但我不想为了获得更好的模板引擎而对Web服务器进行Web请求.
有一个更好的方法吗?