Extracting Outlook Contacts with C#

  • Thread starter Thread starter Fritz Switzer
  • Start date Start date
F

Fritz Switzer

Can anyone provide a small snippet in C# that pulls out the Contacts in
Outlook XP.

I've seen a couple of examples in C++ and VB in previous newsgroup posts,
but either the originals didn't work or my conversion skills are weak. And
if I have to use tlbimp.exe what is the right file to use.

Thanks for the help.
 
Hi Fritz

thought ill give it a go and here u are.. It will loop
thru ur outlook app and print the info of each contact
item.

Pls note the following

a) the code is in C# as u require it

b) i set reference in vs.net to the Outlook 2000 library
(C:\Program Files\Microsoft Office\Office\MSOUTL9.OLB) as
i dont have Outlook XP. At code level there should not be
any problem if u refer to the XP libraries(unless MS has
changed some basic interfaces. If u do not use VS.Net and
want to do a tlb, check for a similar file in ur office
folder.


c) Watch out for linewraps. if the code gets wrapped
(warped :) ) in this post, then mail me at
(e-mail address removed) and would be happy to send u the code
in a VS.Net solution format(zipped)

Here is the code


using System;
using Outlook;

namespace Dummy_PullOutlookContactsFromCSharp
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
/// <summary>
/// The main entry point for the
application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: Add code to start
application here
//
OutlookClient
l_objOutClient=new OutlookClient();

l_objOutClient.fnPrintOutlookContactsInfo();

}
}

class OutlookClient
{
public void fnPrintOutlookContactsInfo()
{

Outlook.Application
l_objOutlookApp =new Outlook.Application();
Outlook.MAPIFolder cContacts;
Outlook.Items l_objContactItems;
Outlook.ContactItem
l_objContactItem;
int l_intContactItemCtr ;

// Get NameSpace.
Outlook.NameSpace
l_objOutlookNamespace = l_objOutlookApp.GetNamespace
("mapi");

// Logon. If an outlook app is
already open, then it will reuse that session. Else
// it will perform a fresh
logon. Note that if u have psts and passwords for the
// same, u need to enter the
passwords in the dialogbox when they are shown
l_objOutlookNamespace.Logon
("SR", "", true, true);

// Get all the Contacts Folder
cContacts =
l_objOutlookNamespace.GetDefaultFolder
(Outlook.OlDefaultFolders.olFolderContacts);

//get all the COntacts from the
Contacts Folder
l_objContactItems =
cContacts.Items;

try
{
for
(l_intContactItemCtr=1;l_intContactItemCtr<=l_objContactIte
ms.Count;l_intContactItemCtr++)
{
l_objContactItem =
(Outlook.ContactItem)l_objContactItems.Item
(l_intContactItemCtr);
// Display some
common properties.
print("------------
-------------------------------------------------");
print("Information
for Contact #" + l_intContactItemCtr + " of Total Contacts
#" + l_objContactItems.Count);
print("------------
-------------------------------------------------");

print("Full
Name : " + l_objContactItem.FullName);
print("Title : "
+ l_objContactItem.Title);
print
("BirthDay : " + l_objContactItem.Birthday);
print
("CompanyName : " + l_objContactItem.CompanyName);
print
("Department : " + l_objContactItem.Department);
print("Body : " +
l_objContactItem.Body);
print("FileAs : "
+ l_objContactItem.FileAs);
print
("Email1Address : " + l_objContactItem.Email1Address);
print
("BusinessHomePage : " +
l_objContactItem.BusinessHomePage);
print
("MailingAddress : " + l_objContactItem.MailingAddress);
print
("BusinessAddress : " + l_objContactItem.BusinessAddress);
print
("OfficeLocation : " + l_objContactItem.OfficeLocation);
print
("Subject : " + l_objContactItem.Subject);
print
("JobTitle : " + l_objContactItem.JobTitle);
print("------------
-------------------------------------------------");
Console.WriteLine
("");
// If you want the
contact to be displayed, then uncomment the line below
// After each item
info is printed, the contact window will be shown and
// only on closing
that window, will the next contact be shown
//l_objContactItem.Display(true);
}



}
catch(System.Exception
p_objException)
{
print("Error : " +
p_objException.Message);
}
finally
{

Console.Write("");
Console.Write("Press Enter
to quit application");
Console.ReadLine ();
Console.Write("");
Console.Write("Logging off
and Closing Outlook Application. This will take a
moment.Pls wait...");

// Log off.

l_objOutlookNamespace.Logoff();

// Clean up.
l_objOutlookApp = null;
l_objOutlookNamespace =
null;
l_objContactItems = null;
l_objContactItem = null;

}


}


public void print(object o)
{
if(o != null && o.ToString
()!="")
{
Console.WriteLine
(o);
}
}

}
}



hth

regards,

sr
 
Hi

with referene to your mail below :


Must be an interop issue, though it works on my machine.
When i print the type of the return value of the
Getnamespace method it is as follows

Console.WriteLine((l_objOutlookApp.GetNamespace
("mapi")).GetType());
// Prints "Outlook.NameSpaceClass"

So try out the following

1.
//Comment the original assignment statement
//Add the following modified line

//Outlook.NameSpace l_objOutlookNamespace =
l_objOutlookApp.GetNamespace("mapi");
Outlook.NameSpaceClass l_objOutlookNamespace =
(Outlook.NameSpaceClass) l_objOutlookApp.GetNamespace
("mapi");//watch out for line wraps.

2.
//Comment the original assignment statement
//Outlook.NameSpace l_objOutlookNamespace =
l_objOutlookApp.GetNamespace("mapi");

//Add the following modified line
Outlook.NameSpaceClass l_objOutlookNamespace =
(Outlook.NameSpaceClass) l_objOutlookApp.GetNamespace
("mapi"); //watch out for line wraps.


let me know if this also gives problems...Also once the
l_objOutlookApp is initialized, check the value of the obj
var in the watch window.

The funny part is why is the queryinterface for the
outlook._Application failing??? Im able to see this in
the ILDASM of my interop assembly. If possible mail me the
interop assembly of the Outlook that is created(zipped) so
that i can use ILDASM to check it out

would appreciate any comments from others also

regards,

sr




regards,

sr
From: "Fritz Switzer" <[email protected]>
To: <[email protected]>
Subject: Outlook Contacts code
Date: Wed, 13 Aug 2003 13:45:52 -0500

SR,

Thanks for the code sample. It looks very close and I really appreciate the
effort.

The word wrap was a problem but I think I got everything cleared up. But

I am getting an exception on the NameSpace call: Here is the error.

An unhandled exception of
type 'System.InvalidCastException' occurred in
Dummy_PullOutlookContactsFromCSharp.exe

Additional information: QueryInterface for interface Outlook._Application
failed.

It is right on this line:

Outlook.NameSpace l_objOutlookNamespace =
l_objOutlookApp.GetNamespace("mapi");

I am running Outlook 2000.

I set my reference to MSOUTL9.OLB and using Outlook;

Any thoughts?

TIA

Fritz



<< winmail.dat >>
-----Original Message-----
SR,

Great reply.

Thanks, that looks like exactly what I need. I'll give it a try.

Fritz



--
Fritz Switzer
View my Ink Blog at:
www.abletFactory.com


Hi Fritz

thought ill give it a go and here u are.. It will loop
thru ur outlook app and print the info of each contact
item.

Pls note the following

a) the code is in C# as u require it

b) i set reference in vs.net to the Outlook 2000 library
(C:\Program Files\Microsoft Office\Office\MSOUTL9.OLB) as
i dont have Outlook XP. At code level there should not be
any problem if u refer to the XP libraries(unless MS has
changed some basic interfaces. If u do not use VS.Net and
want to do a tlb, check for a similar file in ur office
folder.


c) Watch out for linewraps. if the code gets wrapped
(warped :) ) in this post, then mail me at
(e-mail address removed) and would be happy to send u the code
in a VS.Net solution format(zipped)

Here is the code


using System;
using Outlook;

namespace Dummy_PullOutlookContactsFromCSharp
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
/// <summary>
/// The main entry point for the
application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: Add code to start
application here
//
OutlookClient
l_objOutClient=new OutlookClient();

l_objOutClient.fnPrintOutlookContactsInfo();

}
}

class OutlookClient
{
public void fnPrintOutlookContactsInfo()
{

Outlook.Application
l_objOutlookApp =new Outlook.Application();
Outlook.MAPIFolder cContacts;
Outlook.Items l_objContactItems;
Outlook.ContactItem
l_objContactItem;
int l_intContactItemCtr ;

// Get NameSpace.
Outlook.NameSpace
l_objOutlookNamespace = l_objOutlookApp.GetNamespace
("mapi");

// Logon. If an outlook app is
already open, then it will reuse that session. Else
// it will perform a fresh
logon. Note that if u have psts and passwords for the
// same, u need to enter the
passwords in the dialogbox when they are shown
l_objOutlookNamespace.Logon
("SR", "", true, true);

// Get all the Contacts Folder
cContacts =
l_objOutlookNamespace.GetDefaultFolder
(Outlook.OlDefaultFolders.olFolderContacts);

//get all the COntacts from the
Contacts Folder
l_objContactItems =
cContacts.Items;

try
{
for
(l_intContactItemCtr=1;l_intContactItemCtr<=l_objContactIte
ms.Count;l_intContactItemCtr++)
{
l_objContactItem =
(Outlook.ContactItem)l_objContactItems.Item
(l_intContactItemCtr);
// Display some
common properties.
print("------------
-------------------------------------------------");
print("Information
for Contact #" + l_intContactItemCtr + " of Total Contacts
#" + l_objContactItems.Count);
print("------------
-------------------------------------------------");

print("Full
Name : " + l_objContactItem.FullName);
print("Title : "
+ l_objContactItem.Title);
print
("BirthDay : " + l_objContactItem.Birthday);
print
("CompanyName : " + l_objContactItem.CompanyName);
print
("Department : " + l_objContactItem.Department);
print("Body : " +
l_objContactItem.Body);
print("FileAs : "
+ l_objContactItem.FileAs);
print
("Email1Address : " + l_objContactItem.Email1Address);
print
("BusinessHomePage : " +
l_objContactItem.BusinessHomePage);
print
("MailingAddress : " + l_objContactItem.MailingAddress);
print
("BusinessAddress : " + l_objContactItem.BusinessAddress);
print
("OfficeLocation : " + l_objContactItem.OfficeLocation);
print
("Subject : " + l_objContactItem.Subject);
print
("JobTitle : " + l_objContactItem.JobTitle);
print("------------
-------------------------------------------------");
Console.WriteLine
("");
// If you want the
contact to be displayed, then uncomment the line below
// After each item
info is printed, the contact window will be shown and
// only on closing
that window, will the next contact be shown
//l_objContactItem.Display(true);
}



}
catch(System.Exception
p_objException)
{
print("Error : " +
p_objException.Message);
}
finally
{

Console.Write("");
Console.Write("Press Enter
to quit application");
Console.ReadLine ();
Console.Write("");
Console.Write("Logging off
and Closing Outlook Application. This will take a
moment.Pls wait...");

// Log off.

l_objOutlookNamespace.Logoff();

// Clean up.
l_objOutlookApp = null;
l_objOutlookNamespace =
null;
l_objContactItems = null;
l_objContactItem = null;

}


}


public void print(object o)
{
if(o != null && o.ToString
()!="")
{
Console.WriteLine
(o);
}
}

}
}



hth

regards,

sr
-----Original Message-----
Can anyone provide a small snippet in C# that pulls out the Contacts
in Outlook XP.

I've seen a couple of examples in C++ and VB in previous newsgroup
posts, but either the originals didn't work or my conversion skills
are weak. And if I have to use tlbimp.exe what is the right file to
use.

Thanks for the help.
--
Fritz


.


.
 
Back
Top