0

I have code that upon click, opens up a pre-defined Outlook Message. My problem is, when the Outlook message window opens, my VB.Net app freezes until, the Outlook message window is either closed or the mail is sent. How can I release the object from vb.net so the my app is normal to use and not frozen in time?

My Code:

    Dim EmailImgPath, strMsg As String

    If CustID = vbEmpty Then
        MsgBox("No Client selected. Please select a client first before clicking on the Notifications Email button.", vbExclamation + vbOKOnly, "No Client Selected")
    Else
        If cmbOrdStatus.Text = "Ready" Then
            Try
                Dim Outl As Object
                Outl = CreateObject("Outlook.Application")
                If Outl IsNot Nothing Then
                    Dim omsg As Object
                    omsg = Outl.CreateItem(0) '=Outlook.OlItemType.olMailItem'
                    omsg.To = txtEmail1.Text
                    omsg.cc = txtEmail2.Text
                    omsg.bcc = EmailBcc
                    omsg.subject = "Order Update from EyeStyle Opticians"
                    strMsg = strMsg & "<p>Dear " & txtFname.Text & ",<br><br>"
                    strMsg = strMsg & "<p>Great News!"
                    strMsg = strMsg & "<p>Your order is ready for collection"
                    strMsg = strMsg & "<p>For any enquiries please call 0734 544376 / 0726 936136 / 0707 908838"
                    strMsg = strMsg & "<p>Thank you for your patronage and assuring you of our very best services at all times."
                    strMsg = strMsg & "<p>Karibu."
                    strMsg = strMsg & "<p>Eyestyle Opticians Ltd.<br><br>"
                    strMsg = strMsg & "<p><img src=" & EmailImgPath & "></p>"
                    omsg.HTMLBody = strMsg
                    omsg.Display(True) 'will display message to user
                End If
        Outl = Nothing
            Catch ex As Exception
                MessageBox.Show("ERROR: Failed to send mail: " & ex.Message)
            End Try           
    End If

1 Answers1

0

The following shows how to use Microsoft.Office.Interop.Outlook to send an e-mail. It's been tested.

Pre-requisite: Outlook installed.

Add Reference:

Note: The instructions below are for VS 2019.

  • In VS menu, click Project
  • Select Add Reference...
  • Click COM
  • Check Microsoft Outlook xx.x Object Library (ex: Microsoft Outlook 16.0 Object Library)
  • Click OK

Add Imports statement

Imports Outlook = Microsoft.Office.Interop.Outlook

CreateMsg:

Private Sub CreateMsg(toAddress As String)
    Dim oApp As Outlook.Application = Nothing
    Dim oNS As Outlook.NameSpace = Nothing

    Try
        'create new instance
        oApp = New Outlook.Application()

        'get MAPI namepsace
        oNS = oApp.GetNamespace("mapi")

        'log on using default profile
        oNS.Logon()

        'logon using specified profile
        'oNS.Logon("profileName", System.Reflection.Missing.Value, False, true)

        'create MailItem
        Dim oMsg As Outlook.MailItem = DirectCast(oApp.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)

        'ToDo: change the message properties as desired (ie: subject, body, etc...)

        oMsg.To = toAddress
        oMsg.Subject = "this is the subject"
        oMsg.Body = "This is a test " & DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff")

        'send message
        For Each account As Outlook.Account In oApp.Session.Accounts

            Debug.WriteLine($"account SMTP address: {account.SmtpAddress}")

            If account.SmtpAddress = "desiredFromAddress@outlook.com" OrElse oApp.Session.Accounts.Count = 1 Then
                Debug.WriteLine($"Sending from {account.SmtpAddress}...")
                oMsg.SendUsingAccount = account
                oMsg.Send()
                Exit For
            End If
        Next

        'sleep to allow send to complete
        System.Threading.Thread.Sleep(150)

        'send and receive
        oNS.SendAndReceive(False)

        'log off
        oNS.Logoff()

        'oMsg.Display(True)
        'oMsg.Display(False)

    Finally
        If oApp IsNot Nothing Then
            oApp.Quit()
        End If
    End Try
End Sub

Resources:

Tu deschizi eu inchid
  • 4,117
  • 3
  • 13
  • 24