ARTICLE

Outlook Integration in C#

Posted by Sairam Articles | Office Development October 31, 2006
This article describes how we can manipulate outlook from Visual Studio 2005.
Reader Level:
Download Files:
 

This article introduces a integrating the outlook from visual studio. We can do the manipulation with outlook with c# language. We can create contacts in outlook contacts, tasks in outlook tasks from visual studio. Microsoft provides the Com components libraries. To complete this task The Microsoft Outlook 11.0 Outlook Library reference should be added to our project from com components tab. When we add reference to our project the Microsft.Office.Core and Outlook assemblies will be added.

The outlook name space consists of all outlook classes like application, contact item, task item, appointment item, and Journal item. Every class deals with the folders in out look application. In this article we are going to create contact in default contact folder. In the same way we can create tasks, appointment etc in out look from visual studio with c# code.

A brief introduction to outlook.
           
.pst File

Microsoft Outlook (non-Exchange Server) uses files with the extension .pst to store your e-mail messages, calendar, contacts, and other information to your computer. These files mobilize you to restore data that is lost or damaged because of a hardware failure and move or transfer data to a different hard disk drive.

MapiFolders

Outlook uses MAPI folders to keep track of your e-mail messages, contacts, appointments, tasks, notes, and journal entries. Outlook keeps these files in one of two places, depending on the type of e-mail server you use. Your MAPI file is either in a personal storage folder (.pst) on your hard disk drive or in a mailbox located on the server, if you are using Outlook with Microsoft Exchange server.

For accessing those MAPI folders first we have to instantiate the Outlook Application object. We are referring the outlook name space couple of times .so, rename outlook name space rename like this.

using OutLook = Microsoft.Office.Interop.Outlook;

First we have to create outlook application interface object.

OutLook._Application outlookObj = new OutLook.Application();

As outlook uses mapi folders to keep contacts, we have to loop through all outlook folders and get the outlook contact folder.

OutLook.MAPIFolder fldContacts = (OutLook.MAPIFolder)outlookObj.Session.GetDefaultFolder(OutLook.OlDefaultFolders.olFolderContacts);

Then, we have to instantiate outlook contact item and add to the outlook contacts folder as below.

OutLook.ContactItem newContact = (OutLook.ContactItem)fldContacts.Items.Add(OutLook.OlItemType.olContactItem);

Get the properties of contact item as shown below.

newContact.FirstName = txtFirstName.Text.Trim().ToString();
newContact.LastName = txtLastName.Text.Trim().ToString();
newContact.Email1Address = txtEmail.Text.Trim().ToString();
newContact.Business2TelephoneNumber = txtPhone.Text.Trim().ToString();
newContact.BusinessAddress = txtAddress.Text.Trim().ToString();

In our example the contact properties are getting from text box values .so the text box values are assigning to the outlook contact item. These values we can get from database, excel sheet or Web service.

We can save this new contact item by invoking the save method on contact item object.

newContact.Save();

The contact item will be created in default contacts folder in outlook.

If we need to create a custom folder in default contacts folder of outlook application, we can follow below steps.
First we have to check whether the folder exists or not and if not create new folder as like this.

public bool CheckCustomFolderExisits()

{

    OutLook._Application outlookObj = new OutLook.Application();

    OutLook.MAPIFolder fldContacts = (OutLook.MAPIFolder)outlookObj.Session.GetDefaultFolder(OutLook.OlDefaultFolders.olFolderContacts);

    //VERIFYING THE CUSTOM SUB FOLDER IN CONTACTS FOLDER IN OUT LOOK.

    foreach (OutLook.MAPIFolder subFolder in fldContacts.Folders)

    {

        if (subFolder.Name == "CustomeFolderName")

        {

            CustomFolder= subFolder;

            return true;

        }

        else

            return false;

    }

    return false;

}

 

For verifying the existing folder we have to loop through the all folders in contacts folder

If not create folder in default contacts folder as below.

public void CreateCustomFolder()

{

    OutLook._Application outlookApp =

new OutLook.Application();

    OutLook.MAPIFolder cntctFolder =

 (OutLook.MAPIFolder)

outlookApp.Session.GetDefaultFolder(OutLook.OlDefaultFolders.olFolderContacts);

    //VERIFYING THE CUSTOM FOLDER IN OUT LOOK .

    foreach (OutLook.MAPIFolder subFolder in cntctFolder.Folders)

    {

        if (subFolder.Name == " CustomeFolderName ")

        {

            CustomFolder= subFolder;

        }

    }

    //IF  CUSTOM FOLDER DOES NOT EXIST CREATE A NEW FOLDER WITH NAME  CUSTOM FOLDER NAME.

    if (CustomFolder == null)

    {

        CustomFolder = contactsFolder.Folders.Add("CustomeFolderName ", Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderContacts);

    }

}

 

We can create contacts in this folder as u follow steps as same as in creating the contacts in default folder ,by passing our custom folder as the parameter . When we are creating the contact in default contacts folder it creates the contact item with unique entry id. We can cross verify the contacts by this entry id.

 

If  want to add custom properties to contact item the contact item has a list property  called  user properties where we can add custom properties to identify the contact.

 

In our code example, the grid shows the contacts in different folders in outlook application. The folders in our outlook application are displayed in a combo.

This code gets the contacts from contacts folder in outlook application.

foreach (Microsoft.Office.Interop.Outlook._ContactItem contactItem in fldContacts.Items)

{

    MyContact contact = new MyContact();

    contact.FirstName = (contactItem.FirstName == null) ? string.Empty :      

                                   contactItem.FirstName;

    contact.LastName = (contactItem.LastName == null) ? string.Empty :

                                  contactItem.LastName;

    contact.EmailAddress = contactItem.Email1Address;

    contact.Phone = contactItem.Business2TelephoneNumber;

    contact.Address = contactItem.BusinessAddress;

    contacts.Add(contact);

}

 

 

The code example allows creating a contact in default folder or custom folder by selecting the custom folder option. The custom Property added in example is 'myPetName'. We can add custom property to contact item like this.

Notice here, the user properties takes the outlookuserpropertytype as parameter.

newContact.UserProperties.Add("myPetName",OutLook.OlUserPropertyType.olText, true, OutLook.OlUserPropertyType.olText);

 

newContact.UserProperties["myPetName"].Value = txtProp1.Text.Trim().ToString();

When we check verify the contact with custom property if it exists it updates the old contact or it creates a new contact. 

Here in this method, it finds the existed contact with user property value.

private OutLook._ContactItem FindContactItem(MyContact contact, OutLook.MAPIFolder folder)

{

    object missing = System.Reflection.Missing.Value;

    foreach (OutLook._ContactItem contactItem in folder.Items)

    {

        OutLook.UserProperty userProperty = contactItem.UserProperties.Find("myPetName", missing);

        if (userProperty != null)

        {

            if (userProperty.Value.Equals(txtProp1.Text.Trim().ToString()))

               return contactItem;

        }

     }

     return null;

}

 

 

 

Outlook Security Access

 

When we are accessing the out look contacts the out look application will prompt for message as shown.

It is a safeguard Microsoft put in to help prevent viruses from mailing everyone in your contacts in outlook. We allow access for 1 minute or more than one minute if there are lots of contacts.

The sample attached can be downloaded and you can learn the how the code works.

Note: VS 2005 and Outlook is required to run this application.

Login to add your contents and source code to this article
post comment
     

Hello,Can someone tell me if the attachments of a public folder postitem are also read when reading the items of a public folder. If this is the case, is there a way to prevent this. The reason why I'm asking this is that I've written a c# application to retrieve the items from a public folder and this application is very slow.Thanks for the help.

Posted by Carlo M May 02, 2013

Outlook integration with sharepoint 2010 tasks using C# Users can connect the sharepoint task list to their outlook..the issue is that all the task appears there including those which are not assigned to the particular user...this is confusing..further as the other tasks do appear user are able to manupulate them... How to work around these two issues..? Has anyone resolved this...

Posted by Saurabh Gupta Feb 22, 2012

Hi, I woul d like to know how we can give permission on "THE CUSTOM FOLDER " Thanks & Regards,

Posted by teddy Ripoche Oct 25, 2011

hai, I'm getting in trouble for read an outlook email which is selected in our inbox folder. i want to select(mail highlighted) particular mail and read the contents of that mail. Please send any code or send any link regarding this... Thanks in advance M.Shankar

Posted by shankar manickavasagam Jun 27, 2011

Hi guys, how are you?. these days I was making an application in c #, to read emails from Outlook 2007, my application works in console mode, but I needed to do as a windows service, and I came across a big problem, not run the application, but it turns out that I turned , and I'll leave the answer so they can use in the future.
first of all I am using dotnet 2010, windows 7, outlook 2007.

I used the code of this page to read mails from Outlook

To create the service, when they believe the service the service account must be in user mode, so when I installed it will say your account and password, also very importantly, the user of windows where configure outlook, this must be the user which run the service so you can run smoothly.

I hope they serve, for any questions, feel free to contact me, my e-mail is:

a23_4567@hotmail.com

Posted by Juan Perez Oct 05, 2010
COMMENT USING
PREMIUM SPONSORS
Over-C is a holistic consortium of communications and technology specialists. We build, deploy and market both business as well as consumer products and solutions.
Get Career Advice from Experts
SPONSORED BY
  • PDF reports have never been easier to create. With our included WYSIWYG Designer, you can layout your reports, set up your data source and let DynamicPDF ReportWriter do the rest.
Get Career Advice from Experts