[英]How to Send an aspx page as an email Template
我可以在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事件。 這讓我很困惑。 我可以使用它來呈現對電子郵件的控件。正文並發送,但是無論如何我都不能用它來加載整個頁面。
使用Net.mail ...
我將如何發送以上頁面? 我試圖在頁面上只放一些文本,然后使用自己的頁面加載事件發送它……我無法找出從其他頁面或按鈕發送它的任何其他方式……(您將如何做? “您不必以某種方式將URL加載到對象中嗎?)...無論如何,我嘗試從Skippyfire在舊帖子中描述的頁面加載本身來做到這一點,並從Visual Studio IDE中獲取此錯誤:
一個頁面只能有一個服務器端Form標記。
任何幫助,將不勝感激。
CS
就像這樣:
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);
}
}
還有另一種方法可以...您可以在應用程序中托管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創建/使用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類,即可銷毀處置環境,而不是使用finally塊。
更新,順便說一句,如果您已經在ASP.Net會話中運行,則有更簡單的方法來執行此操作。 請參見HttpServerUtility.Execute方法(字符串,TextWriter)
請注意:上面的代碼是從工作副本中復制/粘貼並簡化的,我想我已經獲得了您需要的一切,但是我的實際實現要復雜得多。 如果您有任何麻煩,可以在Internet上找到這些API的一些實際示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.