2014-02-10 53 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

相關問題