Hiahmadlubiss,
Using below articles i have created the sample.
Check this example. Now please take its reference and correct your code.
HTML
<%@ Register Assembly="CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"
Namespace="CrystalDecisions.Web" TagPrefix="CR" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true"
Height="400" Width="600" BestFitPage="False" toolpanelview="None" />
<br />
<asp:Button ID="btnSend" Text="Send Email" runat="server" OnClick="SendEmail" />
</div>
</form>
</body>
</html>
Namespaces
C#
using System.Configuration;
using System.Data.SqlClient;
using System.IO;
using System.Net;
using System.Net.Mail;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using iTextSharp.text.pdf;
VB.Net
Imports System.Configuration
Imports System.Data.SqlClient
Imports System.IO
Imports System.Net
Imports System.Net.Mail
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports iTextSharp.text.pdf
Code
C#
ReportDocument crystalReport;
protected void Page_Load(object sender, EventArgs e)
{
crystalReport = new ReportDocument();
crystalReport.Load(Server.MapPath("~/CustomerReport.rpt"));
Customers dsCustomers = this.GetData("SELECT TOP 5 * FROM customers");
crystalReport.SetDataSource(dsCustomers);
CrystalReportViewer1.ReportSource = crystalReport;
}
private Customers GetData(string query)
{
string conString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
SqlCommand cmd = new SqlCommand(query);
using (SqlConnection con = new SqlConnection(conString))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (Customers dsCustomers = new Customers())
{
sda.Fill(dsCustomers, "DataTable1");
return dsCustomers;
}
}
}
}
protected void SendEmail(object sender, EventArgs e)
{
Stream stream = crystalReport.ExportToStream(ExportFormatType.PortableDocFormat);
string password = "pass@123";
byte[] bytes;
PdfReader reader = new PdfReader(stream);
using (MemoryStream output = new MemoryStream())
{
PdfEncryptor.Encrypt(reader, output, true, password, password, PdfWriter.ALLOW_SCREENREADERS);
bytes = output.ToArray();
}
using (MailMessage mm = new MailMessage("sender@gmail.com", "recipient@gmail.com"))
{
mm.Subject = "Crystal Report PDF";
mm.Body = "Attachment: Customer's Crystal Report PDF";
mm.Attachments.Add(new Attachment(new MemoryStream(bytes), "Crystal.pdf"));
mm.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.UseDefaultCredentials = true;
NetworkCredential NetworkCred = new NetworkCredential("sender@gmail.com", "xxxx");
smtp.Credentials = NetworkCred;
smtp.Port = 587;
smtp.EnableSsl = true;
smtp.Send(mm);
}
}
VB.Net
Private crystalReport As ReportDocument
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
crystalReport = New ReportDocument()
crystalReport.Load(Server.MapPath("~/CustomerReport.rpt"))
Dim dsCustomers As Customers = Me.GetData("SELECT TOP 5 * FROM customers")
crystalReport.SetDataSource(dsCustomers)
CrystalReportViewer1.ReportSource = crystalReport
End Sub
Private Function GetData(ByVal query As String) As Customers
Dim conString As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
Dim cmd As SqlCommand = New SqlCommand(query)
Using con As SqlConnection = New SqlConnection(conString)
Using sda As SqlDataAdapter = New SqlDataAdapter()
cmd.Connection = con
sda.SelectCommand = cmd
Using dsCustomers As Customers = New Customers()
sda.Fill(dsCustomers, "DataTable1")
Return dsCustomers
End Using
End Using
End Using
End Function
Protected Sub SendEmail(ByVal sender As Object, ByVal e As EventArgs)
Dim stream As Stream = crystalReport.ExportToStream(ExportFormatType.PortableDocFormat)
Dim password As String = "pass@123"
Dim bytes As Byte()
Dim reader As PdfReader = New PdfReader(stream)
Using output As MemoryStream = New MemoryStream()
PdfEncryptor.Encrypt(reader, output, True, password, password, PdfWriter.ALLOW_SCREENREADERS)
bytes = output.ToArray()
End Using
Using mm As MailMessage = New MailMessage("sender@gmail.com", "recipient@gmail.com")
mm.Subject = "Crystal Report PDF"
mm.Body = "Attachment: Customer's Crystal Report PDF"
mm.Attachments.Add(New Attachment(New MemoryStream(bytes), "Crystal.pdf"))
mm.IsBodyHtml = True
Dim smtp As SmtpClient = New SmtpClient()
smtp.Host = "smtp.gmail.com"
smtp.UseDefaultCredentials = True
Dim NetworkCred As New NetworkCredential("sender@gmail.com", "xxxx")
smtp.Credentials = NetworkCred
smtp.Port = 587
smtp.EnableSsl = True
smtp.Send(mm)
End Using
End Sub