Email Crystal Reports from C# Application

The following program describes how to email a Crystal Reports from C# .

All C# Crystal Reports Tutorial in this website is based on the following database - crystaldb. So before you begin this section , please take a look at the database structure of crystaldb - Click Here C# crystaldb

If you are new to Crystal Reports and do not know how to create Crystal Reports from C# , please take a look at the section step by step tutorial for creating a Crystal Reports from C#.

For email a Crystal Report from C# first we have to export the Crystal Reports in any of the File Format available in Crystal Reports and then Email it.

In this section we use the previous tutorial C# Crystal Reports Export to PDF file . So before we start this section please take a look at the tutorial C# Crystal Reports Export to PDF file.

Once you have successfully exported the Crystal Reports as a PDF file format and saved it to your disk, the subsequent step involves sending that particular file via email. To accomplish this, we can rely on the System.Web.Mail library available in C#. It is essential to provide the requisite information for configuring the SmtpMail client, allowing us to transmit the exported file as an attachment.

To proceed, select the default form (Form1.cs) you created in C# and proceed to add two buttons (Button1 and Button2) along with a CrystalReportViewer control to your form.

You have to include CrystalDecisions.CrystalReports.Engine in your C# Source Code.

using CrystalDecisions.CrystalReports.Engine; using CrystalDecisions.Shared; using System.Web.Mail;

Copy and paste the following source code and run your C# project.

Full Source C#
using System; using System.Windows.Forms; using CrystalDecisions.CrystalReports.Engine; using CrystalDecisions.Shared; using System.Web.Mail; namespace WindowsApplication1 { public partial class Form1 : Form { ReportDocument cryRpt; string pdfFile = "c:\\"; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { cryRpt = new ReportDocument(); cryRpt.Load(PUT CRYSTAL REPORT PATH HERE\\CrystalReport1.rpt"); crystalReportViewer1.ReportSource = cryRpt; crystalReportViewer1.Refresh(); } private void button2_Click(object sender, EventArgs e) { try { ExportOptions CrExportOptions ; DiskFileDestinationOptions CrDiskFileDestinationOptions = new DiskFileDestinationOptions(); PdfRtfWordFormatOptions CrFormatTypeOptions = new PdfRtfWordFormatOptions(); CrDiskFileDestinationOptions.DiskFileName = pdfFile; CrExportOptions = cryRpt.ExportOptions; CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile; CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat; CrExportOptions.DestinationOptions = CrDiskFileDestinationOptions; CrExportOptions.FormatOptions = CrFormatTypeOptions; cryRpt.Export(); sendmail(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } private void sendmail() { try { SmtpMail.SmtpServer.Insert(0, "your hostname"); MailMessage Msg = new MailMessage(); Msg.To = "to address here"; Msg.From = "from address here"; Msg.Subject = "Crystal Report Attachment "; Msg.Body = "Crystal Report Attachment "; Msg.Attachments.Add(new MailAttachment(pdfFile)); System.Web.Mail.SmtpMail.Send(Msg); } catch (Exception ex) { MessageBox.Show (ex.ToString()); } } } }

cryRpt.Load(PUT CRYSTAL REPORT PATH HERE\\CrystalReport1.rpt");

The Crystal Reports file path in your C# project files location, there you can see CrystalReport1.rpt . So give the full path name of Crystal Reports file like c:\projects\crystalreports\CrystalReport1.rpt

Before you run this program , you have to provide the necessary SMTP information , that is your HOSTNAME , FROM ADDRESS and TO ADDRESS to the SMTP client.