Подтвердить что ты не робот

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

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

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

4b9b3361

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