How Can I List All the Members of a Microsoft Outlook Distribution List?

How Can I List All the Members of a Microsoft Outlook Distribution List?

  • Comments 4
  • Likes

Hey, Scripting Guy! Question

Hey, Scripting Guy! How can I list all the members of a Microsoft Outlook distribution list?

-- KH

SpacerHey, Scripting Guy! AnswerScript Center

Hey, KH. You know, that’s an interesting question. As it turns out, you can – ow! Hey, let go! Ow! Stop it! Come on, give us a chance; we were just about to tell them! Ow!

Um, excuse us. It has come to our attention that, due to a … production error … yesterday’s column inadvertently made a number of less-than-flattering references to the Scripting Editor. (Ow! Come on; that really hurts! We were just about to get to that part.) The Scripting Guys deeply regret any misconceptions that might have arisen due to that column. Needless to say, we have nothing but the utmost respect for the Scripting Editor, who is not only – by far – the smartest and most competent member of the team, but is a truly kind and caring human being as well. As such, we know that the Scripting Editor will accept our humble and sincere apology; we hope that the rest of you will, too.

There; we said it. Now will you let us go? After all, we can’t very well write today’s column if you keep twisting our arms like that.

Ow! You know, that last twist was totally uncalled for.

No, that’s OK; we’ll stop complaining. Your absolutely right: we’d prefer that you didn’t give us something to complain about.

Now, where were we? Oh, right: listing all the members of a Microsoft Outlook distribution list. Here you go, KH; try this baby on for size:

Const olFolderContacts  = 10

Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(olFolderContacts)

Set objList = objFolder.Items("Approved Vendors")

For i = 1 to objList.MemberCount
    Set objMember = objList.GetMember(i)
    Wscript.Echo objMember.Name & ", " & objMember.Address 
Next

As you can see, listing all the members of an Outlook distribution list is actually pretty easy. We begin by defining a constant named olFolderContacts and setting the value to 10; that tells the script to look for the distribution list in the Contacts folder (which, by default, is where distribution lists tend to live). We then use these three lines of code to create an instance of the Outlook.Application object and bind us to the MAPI namespace and the Contacts folder:

Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(olFolderContacts)

At this point we’re ready for action. Let’s assume that we want to list the members of the Approved Vendors distribution list. To do that, our first step is to use this line of code to connect to the Approved Vendors list:

Set objList = objFolder.Items("Approved Vendors")

Nothing special there; we’re simply creating an object reference to the distribution list in question. If we wanted to connect to a different distribution list we’d simply reference the name of that list when we create the object reference:

Set objList = objFolder.Items("Northwest Region Team")

Once we make the connection we can then go ahead and list all members. To do that we set up a For Next loop that runs from 1 to the number of people who are members of the list. How are we supposed to know how many people are on the list? Beats us. But, then again, we don’t have to know; instead, we can let Outlook figure that out for us by using the MemberCount property:

For i = 1 to objList.MemberCount

Inside this loop we use the GetMember method to retrieve the individual members of the list, one at a time, and referencing each member by index number (the counter variable i):

Set objMember = objList.GetMember(i) 

Each time we call GetMember we’ll get back an AddressEntry object. In turn, that enables us to echo back the values of the Name and Address properties:

Wscript.Echo objMember.Name & ", " & objMember.Address 

And that’s going to give us output similar to this:

Ken Myer, kenmyer@fabrikam.com
Pilar Ackerman, pilarackerman@contoso.com
Jonathan Haas jhaas@wingtiptoys.com

Ow! Stop it; we were just going to tell them that! Give us a chance, for crying out loud.

No, ma’am; we wee definitely not complaining about you. No way.

As the Scripting Editor … politely … reminded us, any time you try and retrieve information about a distribution list’s membership a dialog box will pop us asking you if you want to allow access to that information. If you say “Yes” then the script will retrieve and display the requested data. If you say “No,” or if you ignore the dialog box altogether, then nothing will be retrieved and nothing will be displayed. The moral of that story? You can’t run this script in unattended fashion; instead, you’ll need to start the script and respond to the dialog box. At that point you can let the script run by itself, although at that point it will probably take only a few seconds for the script to complete its work. (Depending, of course, on the number of people who are part of the distribution list.)

Because of that you might prefer to list the all the members of all your distribution lists in one fell swoop. Hey, no problem. Assuming that all your distribution lists reside in the Contacts folder this should do the trick:

Const olFolderContacts  = 10

Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(olFolderContacts)
Set objItems = objFolder.Items

For i = 1 to objItems.Count
    If TypeName(objItems.Item(i)) = "DistListItem" Then
        Set objList = objItems.Item(i) 
        Wscript.Echo objList.DLName
        For j = 1 to objList.MemberCount
            Set objMember = objList.GetMember(j)
            Wscript.Echo objMember.Name & ", " & objMember.Address
        Next
        Wscript.Echo
    End If
Next

In conclusion, we’d like to reiterate that everything we said in today’s column we said of our own free will, and no one – least of all our beloved Scripting Editor – threatened us in any way, shape, or form. Thank you.

Note to the Scripting Editor. OK, we said it; now can Dean have his kids back? Oh, come on: you said if we included the above disclaimer he could get both of them back. Well, you’re the boss. But he’s not going to be very happy about this.

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment
  • Hey,

    I love this idea - but it doesn't work in my Outlook 2007. I can run other Macros fine but when I try this one it says" Compile Error, Invalid Outside Procedure." Any hints? This would save me tons and tons of hassle if it worked.

    Best,

    Stephen  

  • Is there a particular order in which the contacts are imported?

  • I notice a lot folks want to know Distribution List member counts - I modified your script ( I am new at this ) works for me - thanks for the sample code:

    Const olFolderContacts = 10

    Dim dListcnt

    Set objOutlook = CreateObject("Outlook.Application")

    Set objNamespace = objOutlook.GetNamespace("MAPI")

    Set colContacts = objNamespace.GetDefaultFolder(olFolderContacts).Items

    intCount = colContacts.Count

    Wscript.Echo " Outlook Distribution Member List Count Script "

    For i = 1 To intCount

       If TypeName(colContacts.Item(i)) = "DistListItem" Then

           dListcnt = dListcnt + 1

           Set objDistList = colContacts.Item(i)

           Wscript.Echo objDistList.DLName & " -- " & objDistList.MemberCount

       End If

    Next

    Wscript.Echo dListcnt & " Distribution Lists were found "

  • Can anyone tell me how to get the contact group member details(First Name,Phone Number) from Outlook 2013 using c#