troubleshooting Question

SMTP Email wont send with attachments in VB.Net

Avatar of skyzipper
skyzipperFlag for Afghanistan asked on
.NET ProgrammingVisual Basic.NETWCF
5 Comments1 Solution809 ViewsLast Modified:

I have a Window Service that creates an email with attachments at a specified time every day to a list of email recipients.    I am having problems when it comes to sending out PDF attachments to the SMTP relay.  When I send the mail object, the system takes about 60 to 70 seconds every time and acts like it sends the email, but I don't receive it.  There are four attachments that get sent with each one being anywhere from 70kb to 110kb in size.  The SMTP will send the email without any problem if I don't try and send the attachments.  This makes me believe that the attachments are the cause of the problem.  I contacted our Network guys and they haven't seen the emails in the SMTP mail queue and told me that the max size for attachments is 30MB.  

I have tried sending the information through Gmail and it works perfectly, but our business won't accept that as a permanent solution.

Below is a snippet of code that I am using to create the attachment.  Any idea on what I can try to make it work?

This is the email sending portion of code:

 Sub send_email()

        oMsg.From = New MailAddress("", "Do Not Reply")
        oMsg.Subject = ("Business Downtime Reports")
        oMsg.IsBodyHtml = True

            'Delete out the old files from the reports folder
            'Add the attachments to the email object
            'Setup the message body for HTML
            Dim mbody As String = "<table width=600px border=1> " & _
                             "<tr> " & _
                                 "<td><img src='cid:Business_Logo' alt='Logo' width=150 height=75/></td> " & _
                             "</tr> " & _
                             "<tr> " & _
                                 "<td> " & _
                                     "<table> " & _
                                         "<tr> " & _
                                             "<td> " & _
                                                 "<p>Hello,</p> " & _
                                                 "<p>Attached are the business quality downtime reports for the previous day. </p> " & _
                                                 "<p>You are setup as a recipient of this automated email. If you wish to no longer receive the email, please submit a ticket to the  system using the following link:</p> " & _
                                                 "<p></p> " & _
                                                 "<p>Thank You,</p> " & _
                                                 "<p>Manufacturing Execution Team</p> " & _
                                                 "<p><strong></strong></p> " & _
                                                 "<p>&nbsp;</p> " & _
                                             "</td> " & _
                                             "<td> " & _
                                                 "<img src='cid:Business_Background' alt='Background Image' width=92 height=407/></td> " & _
                                         "</tr> " & _
                                     "</table> " & _
                                 "</td> " & _
                             "</tr> " & _
            'Create the alternate view for email images to appear
            Dim alternateView As AlternateView = alternateView.CreateAlternateViewFromString(mbody, Nothing, "text/html")

            'Create the linked resource for each image
            Dim logo As New LinkedResource(System.AppDomain.CurrentDomain.BaseDirectory & "Images\Business-Logo.jpg", "image/jpeg")
            logo.ContentId = "Business_Logo"
            logo.TransferEncoding = Net.Mime.TransferEncoding.Base64
            Dim logo2 As New LinkedResource(System.AppDomain.CurrentDomain.BaseDirectory & "Images\BusinessBackground.jpg", "image/jpeg")
            logo2.ContentId = "Business_Background"
            logo2.TransferEncoding = Net.Mime.TransferEncoding.Base64

            oMsg.Body = Nothing

            'Msg.Body = mbody.ToString

            'Configure the email server
            Dim client As New SmtpClient()
            client.Host = "smtprelay"

            'Add a comment to the event log
            myEventLog("Business Email was sent")
        Catch ex As Exception
            myEventLog("Error Sending the Email" & ex.ToString)
            myEventLog("Inner Exception is " & ex.InnerException.ToString)
            'Dispose of the mail object
        End Try
    End Sub

This is the section that creates the attachments.  I create the attachments from Crystal Report .rtp files and convert them into pdf's.  The files get created as designed so it appears that the problem doesn't stem from that.  I am curious if it may be the way I am adding the attachments to the the 'oMsg' mail object.

Sub add_attachment()
        'Function that will add the attachments to the email
        Dim cryRpt As New ReportDocument()
        Dim crtableLogoninfos As New TableLogOnInfos
        Dim crtableLogoninfo As New TableLogOnInfo
        Dim myConnectionInfo As New ConnectionInfo()
        Dim CrTables As Tables
        Dim CrTable As Table
        Dim files As String() = Directory.GetFiles(System.AppDomain.CurrentDomain.BaseDirectory & "CrystalSource\")
        With myConnectionInfo
            .UserID = "username"
            .ServerName = "SERVERNAME"
            .Password = "password"
        End With


            'Loop through the Reports folder
            For Each fileName In files
                'Load it to the Crystal Report Engine
                CrTables = cryRpt.Database.Tables
                For Each CrTable In CrTables
                    crtableLogoninfo = CrTable.LogOnInfo
                    crtableLogoninfo.ConnectionInfo = myConnectionInfo

                'Strip the name off the file fro the .rpt extension
                fileName = Path.GetFileName(fileName)
                If fileName.EndsWith(".rpt") Then
                    fileName = Left$(fileName, fileName.Length - 4)
                End If
                'Setup the Crystal Reports Exporter
                Dim crExportOptions As ExportOptions
                Dim CrDiskFileDestinationOptions As New DiskFileDestinationOptions()
                Dim CrFormatTypeOptions As New PdfRtfWordFormatOptions()
                CrDiskFileDestinationOptions.DiskFileName = System.AppDomain.CurrentDomain.BaseDirectory & "Reports\" & fileName & "-" & System.DateTime.Now.ToString("MM-dd-yyyy") & ".pdf"
                crExportOptions = cryRpt.ExportOptions
                With crExportOptions
                    .ExportDestinationType = ExportDestinationType.DiskFile
                    .ExportFormatType = ExportFormatType.PortableDocFormat
                    .DestinationOptions = CrDiskFileDestinationOptions
                    .FormatOptions = CrFormatTypeOptions
                End With


                Dim pdfFile As String = System.AppDomain.CurrentDomain.BaseDirectory & "Reports\" & fileName & "-" & System.DateTime.Now.ToString("MM-dd-yyyy") & ".pdf"

                oMsg.Attachments.Add(New Attachment(pdfFile, System.Net.Mime.MediaTypeNames.Application.Pdf))

                'oMsg.Attachments.Add(New Attachment(pdfFile))
                'Clear out the fileName and crptName variable
                fileName = ""
        Catch ex As Exception
            myEventLog("Failed to create the attachments" & ex.Message)
        End Try
    End Sub

Thanks in advance for your help,

Join the community to see this answer!
Join our exclusive community to see this answer & millions of others.
Unlock 1 Answer and 5 Comments.
Join the Community
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 5 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros