我可以在ASP.NET上用C#设置HTML /电子邮件模板吗?
这个问题是由SkippyFire和其他人提出并回答的......我有一个跟进问题。作为一名新手开发人员,我喜欢让事情变得非常简单。
如果我不正确,Skippyfire说您可以使用以下代码发送完整的aspx页面:
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter htmlTW = new HtmlTextWriter(sw);
this.Render(htmlTW);
然后使用net.mail发送Page.Load事件。这对我来说非常困惑。我可以使用它来控制一个email.Body和发送,但我无法使用它来加载我发现的整个页面。
使用Net.mail ...
我如何发送上面的页面?我试图在页面上没有任何内容,但是有些文本并使用它自己的页面加载事件发送它...我无法找出从其他页面或按钮发送它的任何其他方式......(你会怎么做?不会你不得不以某种方式将URL加载到一个对象中吗?)...无论如何,我试图通过Page Load在旧帖子中描述并从Visual Studio IDE中获取此错误:
一个页面只能有一个服务器端的Form标签。
任何帮助都将不胜感激。
CS
答案 0 :(得分:1)
这将是这样的:
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
{
using (HtmlTextWriter htmlTW = new HtmlTextWriter(sw))
{
this.Render(htmlTW);
}
using (var message = new MailMessage
{
From = new MailAddress("from@company.com"),
Subject = "This is an HTML Email",
Body = sw.ToString(),
IsBodyHtml = true
})
{
message.To.Add("toaddress1@company.com,toaddress2@company.com");
SmtpClient client = new SmtpClient();
client.Send(message);
}
}
答案 1 :(得分:0)
还有另一种方法可以执行此操作...您可以在应用程序中托管ASP.Net运行时。它也不是主要的,这是“你需要做的事情”......
第一步是创建一个可用于与域通信的远程对象。它只需要一个返回页面输出的方法:
internal class RemoteAspDomain : MarshalByRefObject
{
public string ProcessRequest(string page, string query)
{
using (StringWriter sw = new StringWriter())
{
SimpleWorkerRequest work = new SimpleWorkerRequest(page, query, sw);
HttpRuntime.ProcessRequest(work);
return sw.ToString();
}
}
}
然后,当您准备创建/使用ASP.Net时,您可以设置以下环境:
public static string RunAspPage(string rootDirectory, string page, string query)
{
RemoteAspDomain host;
try
{
host = (RemoteAspDomain)ApplicationHost.CreateApplicationHost(typeof(RemoteAspDomain), "/", rootDirectory);
return host.ProcessRequest(page, query);
}
finally
{
ApplicationManager.GetApplicationManager().ShutdownAll();
System.Web.Hosting.HostingEnvironment.InitiateShutdown();
host = null;
}
}
现在应该能够使用以下内容:
string response = RunAspPage("C:\\MyWebAppRoot\\", "/default.aspx", "asdf=123&xyz=123");
显然,您不希望为每个请求执行此操作,因为执行启动关闭操作需要时间。简单地将RunAspPage重构为一个IDisposable类,它会在dispose上破坏环境,而不是使用finally块。
更新,顺便说一句,如果您已经在ASP.Net会话中运行,那么有更简单的方法可以做到这一点。见HttpServerUtility.Execute Method (String, TextWriter)
请注意:上面的代码是从工作副本中复制/粘贴并简化的,我认为我得到了你需要的一切,但我的实际实现要复杂得多。如果您遇到任何问题,可以在互联网上找到这些API的几个真实示例。