共用方式為


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.

 image

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