【问题标题】:How to generate HTML email content with asp.net如何使用 asp.net 生成 HTML 电子邮件内容
【发布时间】:2010-10-14 18:21:50
【问题描述】:

我想以 HTML 格式发送电子邮件。如何使用 asp.net 为电子邮件生成 HTML 内容。

  1. 使用 .aspx 页面的输出(已尝试电子邮件正文中没有任何内容。必须是页面中不能用于电子邮件的内容)
  2. 使用 Webcontrol 并获取 Web 控件输出并将其用作电子邮件正文。
  3. 使用自定义 http 处理程序,因此可以调用处理程序来获取电子邮件正文。

您能否建议最好的解决方案?

如果知道的话,一些指南或示例参考会很棒。

感谢所有回答:

我在下面实现代码:

 string lcUrl = "http://localhost:50771/webform1.aspx";

        // *** Establish the request
        HttpWebRequest loHttp =
             (HttpWebRequest)WebRequest.Create(lcUrl);

        // *** Set properties
        //loHttp.Timeout = 10000;     // 10 secs
        loHttp.UserAgent = "Code Web Client";

        // *** Retrieve request info headers
        HttpWebResponse loWebResponse = (HttpWebResponse)loHttp.GetResponse();

        Encoding enc;
        try
        {
            enc = Encoding.GetEncoding(loWebResponse.ContentEncoding);
        }
        catch
        {
            enc = Encoding.GetEncoding(1252);
        }

        StreamReader loResponseStream =
           new StreamReader(loWebResponse.GetResponseStream(), enc);

        string lcHtml = loResponseStream.ReadToEnd();

        loWebResponse.Close();
        loResponseStream.Close();

【问题讨论】:

  • 需要注意的一件事是,由于 DNS 设置,并非总是可以通过其托管服务器上的 URL 访问您的网站。通常,如果您有权访问服务器,则可以通过编辑 hosts 文件来解决此问题。虽然不确定共享主机。

标签: asp.net


【解决方案1】:

我认为 ASPX 文件将成为最容易编辑的机制。你可以使用

var stream = new MemoryStream();
var textWriter = new StreamWriter(stream);
Server.Execute("EmailGenerator.aspx", textWriter);

捕获该页面的输出。

我个人不喜欢你的任何选择。我可能会通过使用 HTML 文件(或存储在数据库中的模板)并用适当的参数替换 {{name}} 之类的东西来做到这一点。

【讨论】:

    【解决方案2】:

    我这样做了,基本上我们有一个用户可以查看的页面,然后他们可以单击一个按钮并通过电子邮件发送页面上的 html。基本上我的页面负责生成电子邮件。我通过重写 Render 方法并提供我自己的流或使用传递给我们的流来做到这一点。如果我们呈现用户将看到的内容或通过电子邮件发送,我们会这样做。

      protected override void Render(HtmlTextWriter writer)
        {
    
            if (_altPrintMethod)
            {
                System.Net.Mail.MailMessage....
    
                mailMsg.Body=RenderHtml(baseUrl);
    
            }
         }
            protected virtual string RenderHtml(string baseUrl)
            {
                RemapImageUrl(baseUrl);
    
    
                StreamWriter sw = new StreamWriter(new MemoryStream());
                HtmlTextWriter writer = new HtmlTextWriter(sw);
                base.Render(writer);
                writer.Flush();
                StreamReader sr = new StreamReader(sw.BaseStream);
                sr.BaseStream.Position = 0;
                return sr.ReadToEnd();
    
            }
    

    需要注意的一点是,您必须确保所有链接都是完全合格的。您也许可以使用基本功能。这就是我在 RemapImageUrl 中所做的,基本上我在所有图像文件上附加了一个绝对路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 2016-11-10
      • 2019-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多