代码之家  ›  专栏  ›  技术社区  ›  Michael Kelley Franci Penov

获取用户的电子邮件地址?

  •  12
  • Michael Kelley Franci Penov  · 技术社区  · 16 年前

    有没有办法通过Win32或.NET从Windows中获取用户的电子邮件地址?是否有包含此信息的注册表项或API?

    8 回复  |  直到 16 年前
        1
  •  5
  •   Stu Mackellar    16 年前

    我认为这有意义的唯一方法是在Windows活动目录环境中。在这种情况下,您可以查询广告并查看是否有与用户帐户相关联的电子邮件地址。这肯定适用于MS Exchange,也可能适用于其他企业电子邮件系统。对于.Net,您可以使用 System.DirectoryServices 命名空间。对于Win32,您可以使用 ADSI 应用程序编程接口。你将不得不阅读广告,并创建一个合适的查询,以符合您的要求。

        2
  •  3
  •   Eduard Wirch    16 年前

    您是否已将电子邮件地址保存在系统中的某个位置?没有标准的地方可找。我总是依赖于用户使用的应用程序(Outlook、outlookexpress、TuhunderBird)。

    获取用户电子邮件地址的最好方法是询问他。

        3
  •  3
  •   SQLMenace    16 年前

        4
  •  2
  •   Brian R. Bondy    13 年前

    你可以试着用 NameUserPrincipal EXTENDED_NAME_FORMAT GetUserNameEx 功能。

    用户主体名称(例如,someone@example.com).

    它很有可能会失败 GetLastError ERROR_NONE_MAPPED 但是如果信息不可用。

        5
  •  1
  •   lukmac    16 年前

    我想简单的答案是不。。。当然,电子邮件地址将存储在他们的电子邮件程序中,如Outlook。

    你想达到什么目的?

        6
  •  0
  •   David Morton    16 年前

        7
  •  0
  •   tkotitan    16 年前

    Windows中可能存储了一些电子邮件地址,但要想获得用户的实际电子邮件地址,必须让他们输入,而且要确保这一点,必须在使用前向他们发送一封激活电子邮件来进行握手。

        8
  •  0
  •   Michael Haephrati    6 年前

    Windows应用商店在“中使用电子邮件帐户” UserExtendedProperties “输入

    HKEY_CURRENT_USER\Software\Microsoft\IdentityCRL
    

    因此,您可以使用以下代码获取电子邮件帐户:

    #include <windows.h>
    #include <stdio.h>
    #include <tchar.h>
    
    #define MAX_KEY_LENGTH 255
    #define MAX_VALUE_NAME 16383
    
    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,
                        achKey,
                        &cbName,
                        NULL,
                        NULL,
                        NULL,
                        &ftLastWriteTime);
                    if (retCode == ERROR_SUCCESS)
                    {
                        wprintf(TEXT("(%d) %s\n"), i + 1, achKey);
                    }
                }
            }
        }
    }
    

    当涉及到用于电子邮件的桌面应用程序(即MAPI客户端)时,枚举这些客户端的位置是 Software\Clients\Mail 输入 HKEY_LOCAL_MACHINE. You will find there all installed [MAPI clients][1]. .

    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Default.
    

    另请参见: article and tool / source code to download

        9
  •  0
  •   Karl    5 年前

    我知道这是一个老问题,但如果你像我一样来到这里,根据超级用户的回答

    https://superuser.com/questions/836220/get-email-address-of-current-logged-in-user

    命令运行时 whoami /upn

    它提供了用户主体,这通常是默认的电子邮件

    https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/whoami