2014-02-10 27 views
1

我在ASP.NET中使用Crystal Report。我想通过邮件发送报告。Crystal将报告转换为HTML并以邮件形式发送?

我的代码如下,它可以将Crystal Report转换为html。我的问题是我如何将它放入邮件的正文中?

public void Button1_Click(object sender, EventArgs e) 
    {  
     MemoryStream oStream; // using System.IO 
     oStream = (MemoryStream) 
     CrystalReportSource1.ReportDocument.ExportToStream(
     CrystalDecisions.Shared.ExportFormatType.HTML40); 
     Response.Clear(); 
     Response.Buffer = true; 
     Response.ContentType = "text/html"; 
     Response.BinaryWrite(oStream.ToArray()); 
     sendmail();  
    } 

    private void sendmail() 
    { 
     try 
     { 
      MailMessage mailMessage = new MailMessage(); 
      mailMessage.To.Add(""); 
      mailMessage.From = new MailAddress(""); 
      mailMessage.Subject = "welcome"; 
      mailMessage.IsBodyHtml = true; 

      mailMessage.Body =  /**/ What i can code here??????**? 

      SmtpClient smtpClient = new SmtpClient(); 
      smtpClient.Host = "208.43.62.208"; 
      smtpClient.Port = 2525; 
      smtpClient.Send(mailMessage); 
      Response.End(); 
     } 
     catch (Exception ex) 
     { 
      //MessageBox.Show(ex.ToString()); 
     } 
    } 

回答

1

在您的代码示例中,您使用MemoryStream作为报表的HTML,然后将该流写入Response。这将使报告显示给用户(对吗?)。

你需要做的是使用另一个流类型,也许是一个StreamReader,并得到一个可以在你的邮件中使用的HTML字符串。

未经测试的代码示例:

MemoryStream oStream; // using System.IO 
oStream = (MemoryStream) 
CrystalReportSource1.ReportDocument.ExportToStream(
CrystalDecisions.Shared.ExportFormatType.HTML40); 

oStream.Position = 0; 
var sr = new StreamReader(ms); 
var html= sr.ReadToEnd(); 

sendmail(html); // Use html as your body 

看一看这篇文章,详细了解从MemoryStrea得到一个字符串:How do you get a string from a MemoryStream?

+0

嘿,我得到了它,它的工作,在邮件到来。 ,但是当我打开邮件的时候,我得到了空格,是他们的任何选项来避免它,只显示水晶报表内容。 – vikramm06

+0

太棒了!关于我认为这取决于Crystal Reports如何生成HTML的空间?也许你可以在生成后删除一些生成的HTML代码。我没有安装Crystal Reports,所以我无法尝试。 –

+0

好,我导出格式化为html32,现在工作正常。谢谢 – vikramm06

相关问题