簡體   English   中英

如何將aspx頁面作為電子郵件模板發送

[英]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運行時。 這也不是什么難題,這就是您需要做的“排序”。

  1. 第一步是創建一個可遠程對象,該對象將用於與域通信。 唯一需要的方法是返回頁面輸出的方法:

     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(); } } } 
  2. 然后,當您准備好使用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; } } 
  3. 現在,您應該可以將其與以下內容一起使用:

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM