Blue Theme Orange Theme Green Theme Red Theme
 
Discover the top 5 tips for understanding .NET Interop
Home | Forums | Videos | Advertise | Certifications | Downloads | Blogs | Interviews | Jobs | Beginners | Training
 | Consulting  
Submit an Article Submit a Blog 
 Jump to
Skip Navigation Links
TechnologyExpand Technology
WebsiteExpand Website
Team Foundation Server Hosting
Search :       Advanced Search »
Home » Office Development » Outlook Integration in C#

Outlook Integration in C#

This article describes how we can manipulate outlook from Visual Studio 2005.

Page Views : 197900
Downloads : 5290
Rating :
 Rate it
Level : Beginner
   Print Read/Post comments Post a comment  Similar Articles  
   Email to a friend  Bookmark  Author's other articles  
Download Files:
OutlookIntegrationEx.zip
 
 
6 Months Free & No Setup Fees ASP.NET Hosting!
Become a Sponsor
DevExpress Free UI Controls
Become a Sponsor
 Tag Cloud
 Latest Jobs
More ... 
 Latest Interview Questions
More ... 

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.

Comment Request!
Thank you for reading this post. Please post your feedback, question, or comments about this post Here.
Login to add your contents and source code to this article
 [Top] Rate this article
 
 About the author
 
Sairam
Rambabu is software developer. He is interested in Microsoft Technologies.
Looking for C# Consulting?
C# Consulting is founded in 2002 by the founders of C# Corner. Unlike a traditional consulting company, our consultants are well-known experts in .NET and many of them are MVPs, authors, and trainers. We specialize in Microsoft .NET development and utilize Agile Development and Extreme Programming practices to provide fast pace quick turnaround results. Our software development model is a mix of Agile Development, traditional SDLC, and Waterfall models.
Click here to learn more about C# Consulting.
 
Introducing MaxV - one click. infinite control. Hyper-V Hosting from MaximumASP.
Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
Dynamic PDF
ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications.
Discover the Top 5 .NET Memory Management Fundamentals
To write the best .NET code, you need to know exactly how the .NET framework really manages memory. Ricky Leeks presents the Top 5 fundamental facts of .NET memory management. Learn more.
Nevron Chart for .NET 2010.1 Now Available
The leading .NET charting control now features PDF, Flash and Silverlight export, visualization of large datasets and more. Deliver true charting functionality to your BI, Scorecard, Presentation or Scientific apps. Download evaluation now.
ASP.NET 4 Hosting
Get 2 Months Free of ASP.NET Hosting for Only $4.95/month! Receive FREE MS SQL and MySQL Databases Including ASP.NET 4/3.5, MVC 3.0, Silverlight 4, Windows 2008/IIS 7.0 Plus FREE IIS 7 Modules. Host UNLIMITED ASP.NET Web Sites – Click Here!
 
 Post a Feedback, Comment, or Question about this article
Subject:
Comment:
Nevron Chart
Become a Sponsor
 Comments
Importing Outlook Contacts by Jyothi On November 6, 2006

Hi Ram,

we have developed a softphone application on windows using vs 2003. the application talks with outlook and all contacts from outlook will import in to softphone when outlook is taken as default database for contacts. in some machines the outlook fails to import contacts beyond 200. there is no error message or exception thrown. the outlook jst fails to import. could you please help me what could be the reason for failure.

 

And the machines where it fails is not any differnent from the normal machines in configuration.

 

Thanks & Regards,

Jyothi Gummadi 

Reply | Email | Modify 
Re: Importing Outlook Contacts by Kasun On May 26, 2010
hi by getting help from ur program 


 i wrote C# application for import unread e-mails from outlook 2007, i could import sender name, sender mail address,subject and body to data grid view as following

 if (mailItem.UnRead)

{

UnreadEmails mail = new UnreadEmails(); mail.SenderName = (mailItem.UnRead == false) ? string.Empty : mailItem.SenderName; mail.SenderAddress = (mailItem.UnRead == false) ? string.Empty : mailItem.SenderEmailAddress; mail.Subject = (mailItem.UnRead == false) ? string.Empty : mailItem.Subject; mail.BodyContent = (mailItem.UnRead == false) ? string.Empty : mailItem.Body; // mail.AttachmentContent = (mailItem.UnRead == false) ? string.Empty : mailItem.Attachments.Session.OpenSharedItem; emails.Add(mail);

}

UnreadEmails is a separte class as in your program . but couldn't find a way to import attachments (word pdf ppt excel etc. ) because i need it for my filter pls help me about it

Reply | Email | Modify 
What if i want to suppress this prompt through code by faiyaz On February 21, 2007
When we are accessing the out look contacts the out look application will prompt to allow access for . What if i want to suppress this prompt through code
Reply | Email | Modify 
reg supressing outlook security access by anand On September 24, 2007
Hi Rambabu, In the current project iam in,iam getting the outlook security access window which you have shown at the end of the article.I want to supress that window through code. can you pls guide me how we can supress.. Regards.. Anand swaroop
Reply | Email | Modify 
How we can integrate outlook from web applications by inderjeet On March 3, 2008
How we can integrate outlook from web applications
Reply | Email | Modify 
outlook 2007 by Jo On March 17, 2008
this code is not working with the libary from outlook 2007
Reply | Email | Modify 
Integration Of outlook by sai On March 24, 2009
Hi, My requirement is Integration of outlook into my application. Inorder to start the integration, first we are adding the COM library references of outlook into my referencs. Actually my requirement is I dont know which version of outlook client has installed on his workstyation? For my programming purpose if I add outtlook 2007 Dll (outlook 12.0 library) then the client who has outlook 2003 (outlook 11.0 library) can't access my application.It will throw exceptions. How can I fix this problem? Can I add outlook references dynamically based on installed outlook version? How to solve this please help me? Regards ---------- Sai kumar bayyavarapu
Reply | Email | Modify 
Works like a charm! by ogegoon On August 4, 2009
Great! This is exactly what I am looking for.... No need for me to read the MSDN :o)

I have upgraded your code to VS.net 2008 and replaced the COM references by the Microsoft.Office.Interop.Outlook delivered by MS (available in the .Net tab of the Add references window). It works like a charm !

O.
Reply | Email | Modify 
How to suppres When we are accessing the out look contacts the out look application will prompt for message as shown. by hema On August 25, 2009
Hi ram,


          This article is very help to me. is there any possible to suppress the Outlook error message through code after when we add a contact. pls tell me.
Reply | Email | Modify 
Access contacts in Windows service by Miha On October 22, 2009
Hi!

Very helpful article!

I have one question: It's possible to access outook contacts in windows service? It throws me exception: Cannot complete the operation. You are not connected. 
Exception is throw when I want to get outlook contact folder :
 OutLook.MAPIFolder fldContacts = (OutLook.MAPIFolder)outlookObj.Session.GetDefaultFolder(OutLook.OlDefaultFolders.olFolderContacts);



Any ideas?

Regards,
MM
Reply | Email | Modify 
with out Microsoft.Office.Interop.Outlook.dll how we can do this? by Dinesh On December 15, 2009
with out Microsoft.Office.Interop.Outlook.dll how we can do this?
Reply | Email | Modify 
Don't Understand What to do with Dowloaded Files by Stephen On September 16, 2010
Hi
I have downloaded the sample files and unzipped them. Tried opening in Visual Studio 2005. If I open OutlookIntegrationEx.sln, I get these errors:
Cannot find wrapper assembly for type library "Microsoft.Office.Core".
Cannot find wrapper assembly for type library "Outlook".
Reply | Email | Modify 
Final Windows Service and Outlook by Juan On October 5, 2010

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

Reply | Email | Modify 
read selected outlook email by shankar On June 27, 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
Reply | Email | Modify 
permission on "THE CUSTOM FOLDER " by teddy On October 25, 2011
Hi, I woul d like to know how we can give permission on "THE CUSTOM FOLDER " Thanks & Regards,
Reply | Email | Modify 
DevExpress Free UI Controls
 © 2012  contents copyright of their authors. Rest everything copyright Mindcracker. All rights reserved.