HOW TO: Export all email addresses from a domain

Background: The Active Directory Users & Computers (ADUC) UI lets you list the mail column for each object, which displays the default (SMTP) email address for objects. You can export the list from ADUC to a CSV/txt file. However, any additional email addresses in the proxyAddresses attribute are not exported.

There’s no GUI interface (in ADUC or ESM) to list or export all email addresses. Here’s a script to do that – ListEmailAddresses.vbs.

Download link updated to non-HTTPS.

What does it exactly do?

  1. Queries Active Directory for Contacts & Groups
  2. Lists their email addresses
  3. Queries Users
  4. Lists enabled users’ email addresses
  5. Lists disabled users’ email addresses separately (was required for a certain project I did a long time back)
  6. Outputs to command line and also to a text file – c:\proxyaddresses.txt
    X.400 addresses are ignored

Related Posts

Written by

Bharat Suneja

143 Comments

  1. Seth

    This program looks really great, I only have two questions and before i ask I would like to thank you for your hard work and thank you again very much for your time and help, I do indeed appreciate it VERY MUCH. Ok, having said that here are my questions.
    1) IS ther a way to pipe the output to text? I do not seem to have figured out the correct way, I always get a 0 byte file with my standard filename.vbs > filename.txt procedure. 2) Is there a way to modify it so I get all smtp address? I seem to only get the Proxy addresses which are usually secondary, also is there a way to get help with the program? a /? did not do that for me –
    Again I appreciate your time and help in this,

    Seth Roth

  2. boe

    I agree with Seth – thanks so much for your hard work.

    I also would like the exact same info as Seth.

    Thanks!

  3. Anonymous

    the program dump information

    ‘Output to a text file
    Set objFileSystem = CreateObject(“Scripting.FileSystemObject”)
    Set objOutputFile = objFileSystem.CreateTextFile(“C:\proxyaddresses.txt”)
    objOutputFile.Write strResult

    C:\proxyaddresses.txt look there

  4. Anonymous

    sorry for the dumb question, but how do i run the ListEmailAddresses.vbs script? Thanks for the help or you can email me at [email protected]

  5. Bharat Suneja

    Run it from a command prompt. If cscript is not your default script host (and no harm done even if it is):
    cscript scriptname.vbs

    The script will generate a txt file in the root folder of your c:\ drive – c:\proxyaddresses.txt – as noted in one of the previous comments as well.

    Bharat

  6. Anonymous

    awesome..thanks so much. Saved me a call to Microsoft techsupport on how to output all SMTP addresses to a txt file.

  7. Farrukh Munir

    I am facing one problem that how I can get the internal email (through exchange server) address from my outlook.for example I got the email and I just want to figure out only “From” (received email)

    exchange server used x400 protocol and I can not get only sender email address..if anyone has idea about it then please do send me piese of code.

  8. Anonymous

    I am facing one problem that how I can get the internal email (through exchange server) address from my outlook.for example I got the email and I just want to figure out only “From” (received email)

    exchange server used x400 protocol and I can not get only sender email address..if anyone has idea about it then please do send me piese of code.

  9. Farrukh Munir

    I am facing one problem that how I can get the internal email (through exchange server) address from my outlook.for example I got the email and I just want to figure out only “From” (received email)

    exchange server used x400 protocol and I can not get only sender email address..if anyone has idea about it then please do send me piese of code.

  10. Anonymous

    Would someone please send me the code to [email protected] ?!?
    The links seems to be dead….

  11. Anonymous

    Excellent script, thanks a ton.

  12. Anonymous

    Great script thanks a lot.

    do you know how we can also generate emails for public folders?

    thanks again

    Al

  13. WikAdmin

    Thanks so much! This script is a life saver.

  14. Nehemoth

    first Thank you for the script.

    I wanna know how can i change it, so that list me the smpt emails to a file and also from just one specific organization unit.

    Regards

  15. Anonymous

    I also get an error (54, 13) when running the script. Any ideas?

  16. Anonymous

    Hello,

    Any idea when it only produces results for 1000 records?

    Richard

  17. Anonymous

    Any idea why it only produces 1000 records?

  18. Bharat Suneja

    You can increase the “page size” – this is the number of records ADSI returns from an AD search – by adding the following code before objcommand.execute:

    objCommand.Properties(“Page Size”) = 2000

    (Set it to number of records you want to return…).

    I will modify the script soon to move through “pages” without having to set a pagesize for different environments.

  19. Anonymous

    Just a note of thanks for a very useful tool…

  20. Anonymous

    My first and only cscript attempt failed with the following error, any ideas?

    C:\TEMP>cscript ListEmailAddresses.vbs
    Microsoft (R) Windows Script Host Version 5.6
    Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

    C:\TEMP\ListEmailAddresses.vbs(54, 13) (null): 0x80005000

  21. Anonymous

    Perfect script! It’s a life saver.
    Thanks,

  22. Anonymous

    Doesnt work same error about line 54, 13 Null

  23. Anonymous

    Error list.vbs: (54, 13) (null): 0x80005000

    When you look at line 54 it reads:
    strUserDN = objRecordSet.Fields(“distinguishedName”)

    You have to enter your “distinguishedName” for the script to work.
    Now how to get it?
    It’s fairly simple, Let’s assume your domain is called “example.local”, and the container with employees is called “Employees”

    The distinguishedName in this case wil be “OU=Employees,DC=EXAMPLE,DC=LOCAL”

    If you want to get the name for a subfolder “Employees->Accounting” your name would change to “OU=Accounting,OU=Employees,DC=EXAMPLE,DC=LOCAL”

    Moreover, you can uncomment the fllowing lines (by removing ‘)
    wscript.Echo strADPath

    wscript.echo “objDomain: ” & objDomain.distinguishedName

    to dissplay variables you’re looking for.

  24. Bharat Suneja

    You can also get the distinguishedName of a given object from ADSIEdit.msc.

    Bharat

  25. Ilan

    Great script !!
    any way to make it show the names for the public folders ?? (unicode enables too )

    Thanks !!

  26. Bharat Suneja

    Would need to add a loop for (objectClass=publicFolder). In addition to Public Folders, Query-Based Distribution Groups need to be added as well, if I remember correctly.

    Both are on my list of things to do – perhaps this week.

    Bharat

  27. Ilan

    Great !!
    looking forward for it :)

  28. Anonymous

    I have tried running this script many times and it won’t work for me. I have run it against different Exchange servers in fourdifferent domains. The first two clients it works fine without modifying the file. The other two it errors out stating line 100 is the problem. I have tried to modify the script for the two problem domains, but I can only get it to grab a couple addresses. There are well over 500 addresses in each of those domains. The only pattern I see is that the two clients that this worked for had Exchange servers named “Mail” and one of those two servers is also a DC. The other two clients have Exchange Servers named something like “ABCemail” neither being a DC. I have tried modifying the script for with the names of those servers, but it either works partially or not at all. PLEASE HELP!!!

  29. Bharat Suneja

    The script queries Active Directory, so the names of Exchange servers aren’t really an issue here.

  30. Anonymous

    I have recieved the following error msg:

    ListEmailAddresses.vbs(100, 13) (null): 0x80005000

    Please advise.

  31. Anonymous

    Hi Bharat Suneja,

    Your script looks very nice could you please tell me where I need to change the “distinguishedName” I have tried to change on line 54 but I receive this error:
    C:\ListEmailAddresses.vbs(52, 13) ADODB.Recordset: Item cannot be found in the collection
    corresponding to the requested name or ordinal.

    Any help much appreciated,
    Slr

  32. Anonymous

    Is it possible to repost the downloadable file as it appears not to be available any longer.

    Thanks,

    Matthew

  33. Bharat Suneja

    Matthew,

    Thanks for pointing out – download link corrected.

  34. Anonymous

    Thank you, thank you, thank you. Your a super star for the script :)

  35. Anonymous

    Hi,
    I get a script error when running it.
    I get the screen with the results and al that stuff but after closing it I get the following error (in WSH): Line 167
    Char: 1
    Error: ActiveX component can’t create object: ‘Scripting.FileSystemObject’
    Code: 800A01AD
    Srouce: Microsoft VBScripting runtime error
    After that I ofcourse do not get the txt file.
    I tried it using Exchange 2003
    Can anybody help me to correct the problem?

  36. Anonymous

    I also get the error: ADODB.Recordset: Item cannot be found in the collection
    corresponding to the requested name or ordinal.

  37. Anonymous

    Great script. Did you ever manage to get it to do Public Folders?

  38. Anonymous

    Perfect. Does exactly what I wanted. Saves me a lot of time on a regulkar basis. Cheers! Karl

  39. Anonymous

    I get the same error message as others.

    ListEmailAddresses.vbs(53, 13) ADODB.Recordset: Item cannot be found in the collection corresponding to the requested name or ordinal.

    I have the correct distinguishedName for my domain in the script.

  40. Anonymous

    hi, great script !!!
    Just one question, the final text file en encoded ANSI and I need it RTF. Any idea how can I change the encoding of the file via the script ?

  41. Anonymous

    Thanks , Very great Script.
    One question.
    can you include the email addresses in public folders?

  42. Anonymous

    Thanks for the script, it works. Saved me some time collecting this information.

    Regards,

    Juan.

  43. Anonymous

    Thanks SO much! This is excellent.

  44. Anonymous

    This script worked great. Thank you very much. Is there a way to edit it so that it will do just the opposite and located all accounts in AD that do not have the email filled in?

    Right now our company is using a mix of Novel and Windows. Because we use GroupWise as the primary email service, Exchange is not being used. We have several user accounts in AD that never had the email address field filled out because we use Novel. We need to run the script to capture those blank accounts and populate them later with their Novel GW email.

    Thank so much.
    [email protected]

  45. Anonymous

    Is there a way to get the script to only output SMTP addresses, and create a file output file that is simply:

    email
    email
    email

    With no other formating or text.

  46. Anonymous

    Very nice list script, thank you.

    Steve

  47. Anonymous

    Hello

    I am trying to get the email address of an OU. It’s showing the error below.
    (54, 13) ADODB.Recordset: Item cannot be found in the
    ollection corresponding to the requested name.
    Please advise

  48. Anonymous

    Thanks Buddy,

    Worked perfectly.

    Jono.

  49. Anonymous

    THANK YOU!

Leave a Comment

Your email address will not be published. Required fields are marked *