Skip to main content
 首页 » 编程设计

c#之在 asp.net c# 环境中以上一页作为内容发送电子邮件

2024年02月23日30mfryf

好吧,我可以将当​​前页面内容发送到电子邮件就好了,格式有点奇怪,结果与预期略有不同,但我掌握了窍门。

我目前想要做的是在当前页面中发送和访问之前页面的整个格式化表单(我认为这可以通过 session 对象完成)然后将其发送到电子邮件。这包括用户在文本框等中的输入(我目前通过 session 对象在页面上持久化 [如果这很重要])。

我已经尝试在谷歌和这个网站上搜索,但没有找到真正解决这些问题的方法,但有几个问题。

如果有人能指出我正确的方向,将不胜感激。

为清楚起见,这是我用来通过电子邮件发送当前页面的过程:

    StringWriter sw = new StringWriter( ); 
    HtmlTextWriter w = new HtmlTextWriter( sw ); 
    MAIN.RenderControl( w ); 
    string s = sw.GetStringBuilder( ).ToString( ); 
 
    MailMessage message = new MailMessage( ); 
    message.IsBodyHtml = true; 
    message.To.Add( new MailAddress( Session["eMail"].ToString( ) ) ); 
    message.Subject = "foo bar"; 
    message.From = new MailAddress( "email@email.com" ); 
    message.Body = s; //this would be filled with the previous page 

所以基本上,message.Body 将是上一页的表单内容(格式化并包含所有用户内容)。

提前致谢!

编辑:我不是指您当前所在页面之前的字面上的前一页,我的意思是在到达此页面的过程中的前一页(在我的例子中,它是过程中的第二页,并且电子邮件将在第四页发送。

请您参考如下方法:

如果您知道上一个页面的所有参数,您可以创建页面的实例并生成它的 HTML。

我在这里写了一篇关于它的博文:

http://www.diaryofaninja.com/blog/2009/09/14/a-simple-solution-to-viewing-a-preview-of-any-page-in-your-site

基本上这意味着利用 ASP.Net 运行时并在其生命周期内执行页面 - 如果您的页面具有任何公共(public)属性,例如内容 ID 等,您可以将它们设置为其中的一部分。

Page tempPage = new Views.Blog.BlogDetail(); 
tempPage.PageIntro = intro; 
tempPage.PageContent = content; 
 
StringWriter sw = new StringWriter(); 
HttpContext.Current.Server.Execute(tempPage, sw, false); 
if (!String.IsNullOrEmpty(sw.ToString())) 
{ 
    return sw.ToString(); 
} 

显然这不是获取上一页,而是重新生成它并获取其内容。