Connecting Tech Pros Worldwide Help | Site Map

Extracting Outlook Contacts with C#

Fritz Switzer
Guest
 
Posts: n/a
#1: Jul 19 '05
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


SR
Guest
 
Posts: n/a
#2: Jul 19 '05

re: Extracting Outlook Contacts with C#


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
rs_tiin@hotmail.com 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_objC ontactIte
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[color=blue]
>-----Original Message-----
>Can anyone provide a small snippet in C# that pulls out[/color]
the Contacts in[color=blue]
>Outlook XP.
>
>I've seen a couple of examples in C++ and VB in previous[/color]
newsgroup posts,[color=blue]
>but either the originals didn't work or my conversion[/color]
skills are weak. And[color=blue]
>if I have to use tlbimp.exe what is the right file to use.
>
>Thanks for the help.
>--
>Fritz
>
>
>.
>[/color]
SR
Guest
 
Posts: n/a
#3: Jul 19 '05

re: Extracting Outlook Contacts with C#



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
[color=blue]
>From: "Fritz Switzer" <fritz.switzer@abletfactory.com>
>To: <rs_tiin@hotmail.com>
>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[/color]
really appreciate the[color=blue]
>effort.
>
>The word wrap was a problem but I think I got everything[/color]
cleared up. But[color=blue]
>
>I am getting an exception on the NameSpace call: Here is[/color]
the error.[color=blue]
>
>An unhandled exception of[/color]
type 'System.InvalidCastException' occurred in[color=blue]
>Dummy_PullOutlookContactsFromCSharp.exe
>
>Additional information: QueryInterface for interface[/color]
Outlook._Application[color=blue]
>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 >>[/color]
[color=blue]
>-----Original Message-----
>SR,
>
>Great reply.
>
>Thanks, that looks like exactly what I need. I'll give[/color]
it a try.[color=blue]
>
>Fritz
>
>
>
>--
>Fritz Switzer
>View my Ink Blog at:
>www.abletFactory.com
>
>
>
>SR wrote:[color=green]
>> 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)[/color][/color]
as[color=blue][color=green]
>> i dont have Outlook XP. At code level there should not[/color][/color]
be[color=blue][color=green]
>> any problem if u refer to the XP libraries(unless MS has
>> changed some basic interfaces. If u do not use VS.Net[/color][/color]
and[color=blue][color=green]
>> 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
>> rs_tiin@hotmail.com and would be happy to send u the[/color][/color]
code[color=blue][color=green]
>> 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
>>[/color][/color]
(l_intContactItemCtr=1;l_intContactItemCtr<=l_objC ontactIte[color=blue][color=green]
>> 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[/color][/color]
Contacts[color=blue][color=green]
>> #" + 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 : " +[/color][/color]
l_objContactItem.MailingAddress);[color=blue][color=green]
>> print
>> ("BusinessAddress : " +[/color][/color]
l_objContactItem.BusinessAddress);[color=blue][color=green]
>> print
>> ("OfficeLocation : " +[/color][/color]
l_objContactItem.OfficeLocation);[color=blue][color=green]
>> 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[color=darkred]
>>> -----Original Message-----
>>> Can anyone provide a small snippet in C# that pulls[/color][/color][/color]
out the Contacts[color=blue][color=green][color=darkred]
>>> in Outlook XP.
>>>
>>> I've seen a couple of examples in C++ and VB in[/color][/color][/color]
previous newsgroup[color=blue][color=green][color=darkred]
>>> posts, but either the originals didn't work or my[/color][/color][/color]
conversion skills[color=blue][color=green][color=darkred]
>>> are weak. And if I have to use tlbimp.exe what is the[/color][/color][/color]
right file to[color=blue][color=green][color=darkred]
>>> use.
>>>
>>> Thanks for the help.
>>> --
>>> Fritz
>>>
>>>
>>> .[/color][/color]
>
>
>.
>[/color]
Closed Thread


Similar .NET Framework bytes