Приобретите адрес электронной почты пользователя?

Есть ли способ получить адрес электронной почты пользователя из Windows через Win32 или .NET? Есть ли раздел реестра или API, содержащий эту информацию?

EDIT: У меня есть приложение, которое отправляет мою компанию, если наше приложение терпит неудачу, и я хотел бы получить адрес электронной почты с возвратом, чтобы мы могли ответить на этот вопрос, который испытал сбой. В настоящее время я получаю имя пользователя, но это может не совпадать с именем электронной почты. Очевидно, я могу заставить пользователя ввести свой адрес электронной почты, но интерфейс был бы немного более дружелюбным, если бы я мог хотя бы попытаться получить адрес электронной почты и попросить пользователя проверить правильность адреса электронной почты.

Ответ 1

Единственный способ, я могу думать, что это имеет смысл в среде Windows Active Directory. В этом случае вы можете запросить AD и посмотреть, есть ли адрес электронной почты, связанный с учетной записью пользователя. Это определенно будет работать с MS Exchange и может также работать с другими системами электронной почты предприятия. Для .Net вы можете использовать классы в пространстве имен System.DirectoryServices. Для Win32 вы можете использовать ADSI API. Вам нужно будет прочитать AD и создать подходящий запрос в соответствии с вашими требованиями.

Ответ 2

Вы сохранили свой адрес электронной почты где-то в системе? Нет стандартного места для поиска. Я всегда зависим от приложений, которые использует пользователь (Outlook, Outlook Express, TuhunderBird).

Лучший способ получить адрес электронной почты пользователей - спросить его.

Ответ 3

Позвольте мне ответить вам, спросив вас: вы когда-либо вводили свой адрес электронной почты при установке окон?

Ответ 4

Вы можете попробовать использовать константу NameUserPrincipal из перечисления EXTENDED_NAME_FORMAT с помощью GetUserNameEx.

NameUserPrincipal Имя участника-пользователя (например, [email protected]).

Но я бы рекомендовал использовать это как предварительно заполненный адрес в приглашении пользователю.

Вероятно, что с GetLastError в ERROR_NONE_MAPPED он не сработает, но если информация недоступна.

Ответ 5

Я думаю, что простой ответ - нет... но, конечно, адрес электронной почты будет сохранен в их почтовой программе, такой как Outlook.

Чего вы пытаетесь достичь?

Ответ 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.

Смотрите также: статью и инструмент/исходный код для загрузки

Ответ 7

Адреса электронной почты могут быть для веб-клиентов, таких как gmail или они могут быть адресами электронной почты домена. В любом случае реализация должна основываться на специфике настройки электронной почты пользователя. Таким образом, короткий ответ "нет", по крайней мере, нет метода "один размер-подходит всем".

Ответ 8

Может быть НЕКОТОРЫЙ адрес электронной почты, хранящийся в Windows, но для того, чтобы вы получили фактический адрес электронной почты пользователя, вы должны ввести его в него, и, чтобы убедиться в этом, вы должны квитироваться, отправив им активировать электронную почту до вас используйте его.

Ответ 9

Я знаю, что это старый вопрос, но если вы, как и я, прибываете сюда, согласно этому ответу на Superuser

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

На CMD запустите whoami /upn

Это дает пользователю принципал, который часто является электронной почтой по умолчанию

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