How to fetch user's email address

August 20, 2018



Following a question in Stack Overflow, I wrote this article which is about finding the user's email address, or several email addresses if he/she has. 


I looked at the Registry to find out how to do so, by searching for my own email address at the entire Registry. This is rather a tricky method to find out (in all probability) the user's email address from the stored email used to log on to Microsoft services. There are many email clients and methods, among them web mail (Gmail, Yahoo, etc.) and desktop clients (Outlook) and yet, assuming the typical user will use the main email address to sign in to Windows (and most of the Windows user use their Windows account's credentials to even log in to their PC), this works!

Using the code

Windows stores used email accounts used as "Live ID" in the "UserExtendedProperties" key in



The assumption is that this email was selected by the user as the Windows user name to log in to the PC and/or to other WIndows services.

Therefore you can get the email accounts using the following code:


// void GetDefaultEmailAddress()


    HKEY key;

    TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey name

    DWORD    cbName;                   // size of name string 

    TCHAR    achClass[MAX_PATH] = TEXT("");  // buffer for class name 

    DWORD    cchClassName = MAX_PATH;  // size of class string 

    DWORD    cSubKeys = 0;               // number of subkeys 

    DWORD    cbMaxSubKey;              // longest subkey size 

    DWORD    cchMaxClass;              // longest class string 

    DWORD    cValues;              // number of values for key 

    DWORD    cchMaxValue;          // longest value name 

    DWORD    cbMaxValueData;       // longest value data 

    DWORD    cbSecurityDescriptor; // size of security descriptor 

    FILETIME ftLastWriteTime;      // last write time 


    DWORD i, retCode;


    TCHAR  achValue[MAX_VALUE_NAME];

    DWORD cchValue = MAX_VALUE_NAME;


    if (RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Microsoft\\IdentityCRL\\UserExtendedProperties", NULL, KEY_READ, &key) == ERROR_SUCCESS)


        // Get the class name and the value count. 

        retCode = RegQueryInfoKey(

            key,                    // key handle 

            achClass,                // buffer for class name 

            &cchClassName,           // size of class string 

            NULL,                    // reserved 

            &cSubKeys,               // number of subkeys 

            &cbMaxSubKey,            // longest subkey size 

            &cchMaxClass,            // longest class string 

            &cValues,                // number of values for this key 

            &cchMaxValue,            // longest value name 

            &cbMaxValueData,         // longest value data 

            &cbSecurityDescriptor,   // security descriptor 

            &ftLastWriteTime);       // last write time 


        // Enumerate the email accounts subkeys, until RegEnumKeyEx fails.


        if (cSubKeys)


            wprintf(TEXT("\nNumber of email accounts used: %d\n"), cSubKeys);


            for (i = 0; i < cSubKeys; i++)


                cbName = MAX_KEY_LENGTH;

                retCode = RegEnumKeyEx(key, i,







                if (retCode == ERROR_SUCCESS)


                    wprintf(TEXT("(%d) %s\n"), i + 1, achKey);









Points of Interest

When it comes to desktop applications used for email (i.e. MAPI clients) the place to look in order to enumerate these clients, is the 

Software\Clients\Mail Key in HKEY_LOCAL_MACHINE.


You will find there all installed MAPI clients

You can also determine the default one by looking at:



Please reload

Featured Posts

Integrating a Desktop application with Pay Pal in c++

July 3, 2018

Please reload

Recent Posts

March 14, 2017

Please reload

Please reload

Search By Tags
Follow Us
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square

© 2008-2020 Secured Globe Inc.