【问题标题】:Use ASP.NET to e-mail contents of an entire HTML Page?使用 ASP.NET 通过电子邮件发送整个 HTML 页面的内容?
【发布时间】:2010-11-22 16:33:23
【问题描述】:

我创建了一个 HTML 页面,它主要包括:

<div>
   <table>
       <tr>
          <td><asp:label runat="server" id="someText"></asp:label></td>
       </tr>
   </table>
</div>

标签文本是在页面加载时从 SQL 查询生成的。

以上是我页面上的一个非常基本和简化的版本。

我想要实现的是能够通过电子邮件发送整个呈现的 HTML 页面,而无需在我的代码隐藏中再次构建页面来发送它。

有没有办法做到这一点?

提前感谢您的帮助。

【问题讨论】:

    标签: asp.net html vb.net email


    【解决方案1】:

    可能是这样的(尚未测试):

    StringBuilder sb = new StringBuilder();
    HtmlTextWriter hw = new HtmlTextWriter(new System.IO.StringWriter(sb));
    
    this.Render(hw);
    
    MailMessage message = new MailMessage();
    message.IsBodyHtml = true;
    message.Body = sb.ToString();
    
    (new SmtpClient()).Send(message);
    

    【讨论】:

      【解决方案2】:

      如果您想在呈现页面时发送电子邮件,而不重新运行页面生命周期,请尝试以下操作。

      创建一个继承Stream 并包含两个附加流的包装流类,并重写其Write 方法以写入两个流。我认为您不需要覆盖除 Can_Whaterver_ 属性之外的任何其他内容,但我不确定。

      在您的 Page 类中创建一个 MemoryStream 类型的字段来保存响应的副本。

      然后,处理页面的PreInit事件并设置Response.Filter,如下所示:

      Response.Filter = new CopierStream(Response.Filter, responseCopy);
      //`CopierStream` is the custom stream class; `responseCopy` is the MemoryStream
      

      最后,覆盖页面的Render 方法,调用base.Render 后,您可以使用SmtpClient class 通过电子邮件发送responseCopy

      这是一种非常复杂的技术,只有在您真的不想重新运行页面生命周期时才应该这样做。


      无论您采用哪种方式,如果您的页面有任何图像或超链接,请确保其网址包含域名,否则它们将无法在电子邮件中使用。

      【讨论】:

        【解决方案3】:

        使用网络客户端:

        Dim wc As New WebClient
        Dim str As String = wc.DownloadString("yoururl.com")
        SendEmail(str) ' your email method '
        

        【讨论】:

        • +1 这会起作用,如果页面是有效的 html,电子邮件客户端对电子邮件正文中的 HTML 很挑剔......(css 和 js 文件通常不太被接受...... .
        • 只是为了解释一下,各种电子邮件客户端都不能很好地执行javascript。他们总是忽略所有的编码。如果您将 then 嵌入页面而不是引用,则某些 Css 是可以的。
        猜你喜欢
        • 2012-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-07
        • 1970-01-01
        • 1970-01-01
        • 2012-05-25
        • 1970-01-01
        相关资源
        最近更新 更多