Saturday, November 12, 2011

SENDING MAIL USING OUTLOOK IN VB.NET


INTRODUCTION:-
                One of my clients required a desk top application that maintains contacts in a database and sends emails to the contacts in the database.  They have not provided the credentials and the details of mail server.  So I created an application that uses outlook for sending mails by using the credentials preconfigured by the outlook account.  This application can send email for multiple email accounts and with or without attachments.
FEATURES:-
·         Sending mails to multiple email accounts at a time.
·         Using configured outlook credentials.
·         No need of configuring credentials every time.
·         Sending mails with attachments.
CODE EXPLANATION:-
                Create new project and add references as follows.  These files can be downloaded or can be achieved by the sample project which is attached with this article.
  • Interop.Microsoft.Office.Core.dll
  • Interop.Outlook.dll
Let’s go to code part.  Import the following libraries apart from default
Imports Microsoft.Office.Interop.Outlook
Imports Microsoft.Office.Interop
Imports Microsoft.Office
Imports Microsoft

Here we need to create instances for outlook application; namespace and the namespace should be configured with the instance of the outlook application.  We need to configure the outbox i.e.,  the place where the sent mail will be saved in our mail folder.  Then we need to add credentials for this account.  Here we are not going to give any credentials because we need to obtain the credentials from the native outlook application using the code.  The code for this process will be as follows.

  Dim ol As New Outlook.Application()
        Dim ns As Outlook.NameSpace
        Dim fdMail As Outlook.MAPIFolder
        ns = ol.GetNamespace("MAPI")
  ns.Logon(, , True, True)

Now create a new outlook mail item and necessary fields like subject, body, destination folder for saving the message and the priority as follows,
Dim newMail As Outlook.MailItem

        'gets defaultfolder for my Outlook Outbox
        fdMail = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderOutbox)

        'assing values to the new mail mailitem
        newMail = fdMail.Items.Add(Outlook.OlItemType.olMailItem)


        With newMail
            .Subject = txtSubject.Text
            .Body = txtBody.Text
            .SaveSentMessageFolder = fdMail
            .Importance = Outlook.OlImportance.olImportanceHigh
        End With

Add Mail recipients to the mail item.  You can add more than one recipient for sending the same mail to many recipients as follows.
For Each checkedindex In chklstboxEmails.CheckedItems
            newMail.Recipients.Add(checkedindex.ToString())
            'MessageBox.Show(checkedindex.ToString())
        Next
Add attachments as follows.
If (lblAttachmentFile.Text <> "No File Selected..") Then
            Dim attachments As Outlook.Attachments = newMail.Attachments
            Dim attachment As Outlook.Attachment
            Dim sourcefile As String = lblAttachmentFile.Text
            Dim displaytext As String = sourcefile.Substring(sourcefile.LastIndexOf("\") + 1)
            Dim bodylength As String = newMail.Body.Length
            attachment = attachments.Add(sourcefile, , bodylength + 1, displaytext)
        End If
After that you can send the mail using the send() method.
newMail.Send()

This is how we can send mails by using the outlook and outlook preconfigured credentials.

Your comments are valuable for me,Thanking you,
Happy Programming