在Asp.Net web项目中获取aspx页面的内部Html以获取电子邮件

时间:2011-10-05 11:46:03

标签: asp.net web-applications

使用ASP.NET ...

我在popup extender上有一个电子邮件按钮,想要使用另一个html页面的内部aspx用于正文,然后在发送之前编辑几个标记。这可能吗?

基本上我使用.Net.Mail.MailMessage来创建HtmlBody并想要抓住另一个页面的html(而不是实际呈现页面),而不是在字符串中重新创建它

3 个答案:

答案 0 :(得分:0)

如果您将电子邮件的内容放入服务器控件中,则可以将其呈现为字符串。

public static string GetRenderedHtml(this Control control)
{
  StringBuilder sbHtml = new StringBuilder();
  using (StringWriter stringWriter = new StringWriter(sbHtml))
  using (HtmlTextWriter textWriter = new HtmlTextWriter(stringWriter))
  {
    control.RenderControl(textWriter);
  }
  return sbHtml.ToString();
}

如果你有任何可编辑的控件(TextBox,DropDownList等),你需要用标签替换它们。有关完整示例和说明,请参阅以下帖子。

http://jrummell.com/send-a-completed-form-email-without-a-stringbuilder

答案 1 :(得分:0)

您需要创建一个您想要html的页面实例。之后,您可以使用Page's Render方法(请参阅下面关于此受保护的示例)使其生成通常将发送到浏览器的html到HtmlTextWriter。

创建HtmlTextWriter时,可以使用StringBuilders和TextWriters的组合来从HtmlTextWriter获取html。这样的事情。

StringBuilder SB = new StringBuilder();
StringWriter SW = new StringWriter(SB);
HtmlTextWriter htmlTW = new HtmlTextWriter(SW);

MyPage page = new MyPage(); // your page here
page.RenderHtml( htmlTW ); //You need to create this method in your page, see below

string html = SB.ToString();

所以唯一的问题是Page.Render受到保护。您需要在Page类中公开一个调用Render方法的公共方法。

这样的东西应该适用于那种方法

public void RenderHtml( HtmlTextWriter htmlTextWriter )
{
    Render( htmlTextWriter );
}

希望这有帮助。

答案 2 :(得分:0)

首先创建HTML电子邮件不允许复杂的html(内部,外部样式和其他控件)看到......

Html Email Guidline

所以我所做的是使用以下内容创建一个html字符串,用于发送电子邮件......

1)创建一个简单的.htm文件作为模板,格式化标准html表(不是asp:tables)和其他标准html标签中的所有内容。

2)如有必要,仅使用内嵌样式。

3)然后创建可替换的可替换文本单词或短语。您还可以使用注释替换文本或添加到表中,参见下面的标记

    <span style="font-size: 16px;">TodaysDate</span>

    <table id="PeopleTable" border="1" cellpadding="3" cellspacing="0" width="720">
        <tr style="font-weight: bold;">
            <td width="100">
                First Name
            </td>
            <td width="100">
                Last Name
            </td>
            <td width="100">
                Phone Number
            </td>
        </tr>
        <!--AddRowsHere-->
    </table>

4)然后,从后面的代码中的按钮,你需要将.htm页面作为字符串,并用你想要的值替换文本

 Using sr As New System.IO.StreamReader(Server.MapPath("PeoplePage.htm"))
        GetHtml = sr.ReadToEnd
 End Using
 GetHtml = Replace(GetHtml, "TodaysDate", Now.ToShortDateString)

5)将此字符串返回到.Net.Mail.MailMessage.Body并像往常一样将其发送出去。确保设置MailMesage.IsBodyHtml = True

您也可以使用StringBuilder创建整个字符串,而无需使用模板。