HOW TO: Get details about a Exchange User in Outlook 2007 & Outlook 2003
I recently came across an issue where I needed to get the details about Exchange User from within an Outlook Add-in. Below is a screen shot of the details I am referring to.
In Outlook 2007 its very simple, just use the ExchangeUser Object and you will get the details. More details can be found in the article below:
ExchangeUser Object Members
https://msdn.microsoft.com/en-us/library/bb176658.aspx
Below is sample C# code that shows how to use the ExchangeUser Object:
using System;
using System.Collections.Generic;
using System.Text;
using Outlook = Microsoft.Office.Interop.Outlook;
namespace GetUserDetails
{
class Program
{
static void Main(string[] args)
{
Outlook.Application oApp;
Outlook.NameSpace oNameSpace;
Outlook.SelectNamesDialog oSNDialog;
Outlook.AddressEntry oAEntry;
Outlook.ExchangeUser oEUser;
oApp = new Outlook.Application();
oNameSpace = oApp.GetNamespace("MAPI");
oNameSpace.Logon(null, null, true, false);
oSNDialog = oNameSpace.GetSelectNamesDialog();
oSNDialog.NumberOfRecipientSelectors = Outlook.OlRecipientSelectors.olShowTo;
oSNDialog.Caption = "Select User";
oSNDialog.ToLabel = "User Name";
oSNDialog.ShowOnlyInitialAddressList = true;
oSNDialog.AllowMultipleSelection = false;
oSNDialog.Display();
foreach(Outlook.Recipient oRecipient in oSNDialog.Recipients)
{
oAEntry = oRecipient.AddressEntry;
if(oAEntry.AddressEntryUserType == Outlook.OlAddressEntryUserType.olExchangeUserAddressEntry
|| oAEntry.AddressEntryUserType == Outlook.OlAddressEntryUserType.olExchangeRemoteUserAddressEntry)
{
oEUser = oAEntry.GetExchangeUser();
Console.WriteLine(oEUser.Name);
Console.WriteLine(oEUser.BusinessTelephoneNumber);
Console.WriteLine(oEUser.MobileTelephoneNumber);
Console.WriteLine(oEUser.Department);
oEUser = null;
}
oAEntry = null;
}
oNameSpace.Logoff();
oNameSpace = null;
}
}
}
However in Outlook 2003 the ExchangeUser Object is not there. The only way to do it is query the AD based on the AddressEntry.Address(LegacyexchangeDN). Below is sample C# code that uses the DirectoryServices namespace to query the AD based on LegacyexchangeDN.
using System;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;
namespace GetUserDetailsBasedOnLegacyDN
{
class Program
{
static void Main(string[] args)
{
//This is the legacy exchange DN
string LEDN = "/O=ms/OU=east/cn=Recipients/cn=whatever";
DirectoryEntry objRootDSE = new DirectoryEntry("GC://RootDSE");
String strRoot = objRootDSE.Properties["rootDomainNamingContext"].Value.ToString();
DirectoryEntry objRoot = new DirectoryEntry("GC://" + strRoot);
objRoot.RefreshCache();
DirectorySearcher objSrch = new DirectorySearcher(objRoot);
objSrch.Filter = "(&(objectClass=user)(objectCategory=person)(legacyExchangeDN= " + LEDN + "))";
objSrch.SearchScope = SearchScope.Subtree;
DirectoryEntry objUser = new DirectoryEntry();
objUser = objSrch.FindOne().GetDirectoryEntry();
Console.WriteLine("Mobile:" + objUser.Properties["mobile"].Value);
Console.WriteLine("Number:" + objUser.Properties["telephoneNumber"].Value);
Console.WriteLine("Department:" + objUser.Properties["department"].Value);
objUser = null;
objSrch = null;
objRoot = null;
objRootDSE = null;
}
}
}
Note: I am not an AD expert, you might need to tweak the code depending on your environment and your needs.
Comments
- Anonymous
March 10, 2009
Thanks your example was useful to get the required details!!! - Anonymous
July 26, 2009
I need to fetch Home Number of the exchange user,Could you help me ? - Anonymous
July 27, 2009
Here you go!Outlook.PropertyAccessor oPA;String oHome1;oPA = oEUser.PropertyAccessor;//Get the Home Phone numberoHome1 =(String)oPA.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3A09001E");Console.WriteLine(oHome1); - Anonymous
August 07, 2009
The comment has been removed - Anonymous
September 02, 2009
The above code would work only for Outlook 2007. For Outlook 2003 you would have to use the "homePhone" property in the same way we query the "mobile" property. - Anonymous
January 26, 2010
The comment has been removed