使用ASP.NET
...
我在popup extender
上有一个电子邮件按钮,想要使用另一个html
页面的内部aspx
用于正文,然后在发送之前编辑几个标记。这可能吗?
基本上我使用.Net.Mail.MailMessage
来创建HtmlBody
并想要抓住另一个页面的html
(而不是实际呈现页面),而不是在字符串中重新创建它
答案 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字符串,用于发送电子邮件......
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创建整个字符串,而无需使用模板。