How to send emails in vb.net using the Outlook Library
Matthew Barrera
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 1 Answer
After install 'Microsoft.Office.Interop.Outlook' nuget package, you can try the following code to send email (code from ):
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 ModuleResult:
2