0

I'm having a problem trying to use the Microsoft Outlook library to send and receive emails through outlook via VB.net in visual studio. I tried following the microsoft website page, but it is in VBA and doesn't help at all as the I am having a problem trying to call the library in the first place. I have went into dependencies and added the following COM's Microsoft Outlook 16.0 Object Library and Microsoft Outlook View Control. but am unsure if I need to reference them in my code somewhere or not, and I'm not sure what the command would even be, up until now all I have is this:Code. How would I call the library and send emails.

EDIT: This only works in .NET Framework 2.0 or higher, .NET Core doesn't seem to work

Imports System
Imports System.IO


Module Program
    Sub main()
        Dim objOL = New Outlook.Application
        Dim objNS = objOL.GetNamespace("MAPI")
        Dim objFolder = objNS.GetDefaultFolder(10)
        Dim Newtask As Outlook.TaskItem
        ' Set the Application object 
        Dim objOLApps = New Outlook.Application
        ' You can only use CreateItem for default items 
        Dim NewTasks = objOL.CreateItem(6)
        ' Display the new task form so the user can fill it out 
        Newtask.Display()
    End Sub
End Module
1
  • That code creates a task and displays it. What have you tried to create a message (MailItem) and send it? Commented Dec 22, 2020 at 18:37

2 Answers 2

1

After install 'Microsoft.Office.Interop.Outlook' nuget package, you can try the following code to send email (code from https://stackoverflow.com/a/42743804/12666543):

Imports System.IO
Imports Outlook = Microsoft.Office.Interop.Outlook

Module Module1

Sub Main()
    Dim arrAttachFiles As List(Of String) = New List(Of String)() From {
        "the file path you want to attach (e.g. D:\Test.xlsx)" 
    }
    sendEmailViaOutlook("your email address", "email addresses you want to send", "email addresses you want to cc", "this is subject", "this is body", arrAttachFiles)

End Sub
Public Sub sendEmailViaOutlook(ByVal sFromAddress As String, ByVal sToAddress As String, ByVal sCc As String, ByVal sSubject As String, ByVal sBody As String, ByVal Optional arrAttachments As List(Of String) = Nothing)

    Try
        Dim app As Outlook.Application = New Outlook.Application()
        Dim newMail As Outlook.MailItem = CType(app.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)

        If Not String.IsNullOrWhiteSpace(sToAddress) Then
            Dim arrAddTos As String() = sToAddress.Split(New Char() {";"c, ","c})

            For Each strAddr As String In arrAddTos
                If Not String.IsNullOrWhiteSpace(strAddr) AndAlso strAddr.IndexOf("@"c) <> -1 Then
                    newMail.Recipients.Add(strAddr.Trim())
                Else
                    Throw New Exception("Bad to-address: " & sToAddress)
                End If
            Next
        Else
            Throw New Exception("Must specify to-address")
        End If

        If Not String.IsNullOrWhiteSpace(sCc) Then
            Dim arrAddTos As String() = sCc.Split(New Char() {";"c, ","c})

            For Each strAddr As String In arrAddTos

                If Not String.IsNullOrWhiteSpace(strAddr) AndAlso strAddr.IndexOf("@"c) <> -1 Then
                    newMail.Recipients.Add(strAddr.Trim())
                Else
                    Throw New Exception("Bad CC-address: " & sCc)
                End If
            Next
        End If

        If Not newMail.Recipients.ResolveAll() Then
            Throw New Exception("Failed to resolve all recipients: " & sToAddress & ";" & sCc)
        End If

        If arrAttachments IsNot Nothing Then

            For Each strPath As String In arrAttachments

                If File.Exists(strPath) Then
                    newMail.Attachments.Add(strPath)
                Else
                    Throw New Exception("Attachment file is not found: """ & strPath & """")
                End If
            Next
        End If

        If Not String.IsNullOrWhiteSpace(sSubject) Then newMail.Subject = sSubject
        If Not String.IsNullOrWhiteSpace(sBody) Then newMail.Body = sBody
        Dim accounts As Outlook.Accounts = app.Session.Accounts
        Dim acc As Outlook.Account = Nothing

        For Each account As Outlook.Account In accounts

            If account.SmtpAddress.Equals(sFromAddress, StringComparison.CurrentCultureIgnoreCase) Then
                acc = account
                Exit For
            End If
        Next

        If acc IsNot Nothing Then
            newMail.SendUsingAccount = acc
            newMail.Send()
        Else
            Throw New Exception("Account does not exist in Outlook: " & sFromAddress)
        End If

    Catch ex As Exception
        Console.WriteLine("ERROR: Failed to send mail: " & ex.Message)
    End Try
End Sub
End Module

Result:

enter image description here

Sign up to request clarification or add additional context in comments.

3 Comments

This looks like it's fine, but now im having a problem with the file: System.IO.FileNotFoundException: 'Could not load file or assembly 'office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'. The system cannot find the file specified.' Which is weird as it should be 16.0.0.0, so I just added it as COM reference, but it still comes up with this error, I think it may be because OFFICE16 isnt in the PIA file, but I'm not sure, you have any ideas?
Fixed it, I just was running .NET core, so needed to switch to .NET framework and also that you so much!!!!
Yes it worked! how to add photos on the body like labels then photos below?
0

I know it's an old post, but recently I tried to send email from hotmail outlook with no success, and noted that MS Outlook library it's "hard" to use, so decided to make my own quick approach. Searching in the net finally found a key data, the right smtp server, here it's a snippet I hope be of help to anybody else:

        Friend Sub SendEmail(strSMTP As String)
    Dim mail As New MailMessage()
    mail.From = New MailAddress(txtEmail.Text.Trim)
    mail.To.Add(txtDestinatario.Text.Trim)
    mail.Subject = "Prueba"
    mail.Body = "Cuerpo del correo de prueba"

    Dim smtp As New SmtpClient(strSMTP) 
    smtp.Port = 587
    smtp.Credentials = New Net.NetworkCredential(txtEmail.Text.Trim, txtPassword.Text.Trim)
    smtp.EnableSsl = True

    Try
        smtp.Send(mail)
        MsgBox("Correo enviado correctamente.")
    Catch ex As Exception
        Debug.WriteLine("Error al enviar correo: " & ex.Message)
    End Try
    End Sub

To send the email, call the process this way: SendEmail("smtp.office365.com") You will need to import Imports System.Net.Mail Please note that resulting email ended up to spam folder in the recipient email.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.