VB.net Crystal report export to html and send as html mail body using outlook

431 Views Asked by At

I am trying to send contents of a crystal report as email body using outlook application. Here is my code in VB.net

Imports outlook = Microsoft.Office.Interop.Outlook
Dim a As String = something.ConnectionString
            Dim cryRpt As ReportDocument
            Dim username As String = a.Split("=")(3).Split(";")(0) 'get username
            Dim password As String = a.Split("=")(4).Split(";")(0) 'get password
            cryRpt = New ReportDocument()
            Dim Path As String = Application.StartupPath
            Dim svPath As String = Application.StartupPath & "\PDF"
            If Not Directory.Exists(svPath) Then
                Directory.CreateDirectory(svPath)
            End If
            cryRpt.Load(Path & "\Reports\dr.rpt")
            CrystalReportViewer1.ReportSource = cryRpt
            cryRpt.SetDatabaseLogon(username, password)
            CrystalReportViewer1.Refresh()
            Dim myExportOptions As ExportOptions
            myExportOptions = cryRpt.ExportOptions
            myExportOptions.ExportDestinationType = ExportDestinationType.DiskFile
            myExportOptions.ExportFormatType = ExportFormatType.HTML40 'i tried HTML32 also
            Dim html40FormatOptions As HTMLFormatOptions = New HTMLFormatOptions()
            html40FormatOptions.HTMLBaseFolderName = svPath
            html40FormatOptions.HTMLFileName = "dr.htm"
            html40FormatOptions.HTMLEnableSeparatedPages = False
            html40FormatOptions.HTMLHasPageNavigator = False
            html40FormatOptions.UsePageRange = False
            myExportOptions.FormatOptions = html40FormatOptions
            cryRpt.Export()

    Try
                Dim oApp As outlook.Application
                oApp = New outlook.Application

                Dim oMsg As outlook.MailItem
                oMsg = oApp.CreateItem(outlook.OlItemType.olMailItem)

                oMsg.Subject = txtSubject.Text
                oMsg.BodyFormat = outlook.OlBodyFormat.olFormatHTML
                 oMsg.HTMLBody = ""

                oMsg.HTMLBody = getFileAsString(svPath & "\PoPrt\QuotPrt.html")

                oMsg.To = txtEmailId.Text
                Dim ccArray As New List(Of String)({txtCC1.Text, txtCC2.Text, txtCC3.Text})
                Dim cclis As String = String.Join(",", ccArray.Where(Function(ss) Not String.IsNullOrEmpty(ss)))
                oMsg.CC = cclis
                oMsg.Display(True)
            Catch ex As Exception
                MsgBox("Something went wrong", vbExclamation)
            End Try
            SvFormPanel3.Visible = False

the function

Private Function getFileAsString(ByVal file As String) As String
        Dim reader As System.IO.FileStream
        Try
            reader = New System.IO.FileStream(file, IO.FileMode.Open)
        Catch e As Exception
            MsgBox("Something went wrong. " + e.Message, vbInformation)
        End Try

        Dim resultString As String = ""
        Dim b(1024) As Byte
        Dim temp As UTF8Encoding = New UTF8Encoding(True)

        Do While reader.Read(b, 0, b.Length) > 0
            resultString = resultString & temp.GetString(b)
            Array.Clear(b, 0, b.Length)
        Loop

        reader.Close()
        Return resultString
    End Function

The report will get exported to the specified location as html. And when we manually open that html file it displays perfectly with border lines and all. But when its getting added as html body of outlook application, the formatting will be gone, and looks scattered. can anyone help

2

There are 2 best solutions below

1
On

Did you try this?

Open outlook, go to, File>Options>Mail

go to section MessageFormat and untick "Reduce message size by removing format..."

enter image description here

0
On

I have solved the issue by exporting it into PDF and then convert to Image and embed in email body.