Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Получаем адрес электронной почты пользователя Active Directory через Delphi

Delphi , Файловая система , Активные директории

Получение адреса электронной почты пользователя Active Directory через Delphi

При работе с Active Directory в Delphi может возникнуть проблема при попытке получить адрес электронной почты пользователя по имени учетной записи (sAMAccountName). При этом может появиться сообщение об ошибке:

The directory property cannot be found in the cache.

Хотя другие атрибуты, такие как FullName, Department и DisplayName, могут быть получены без проблем.

Причина ошибки

Ошибка связана с тем, что атрибут EmailAddress не доступен при использовании провайдера WinNT://. Вместо этого нужно использовать провайдер LDAP://, и имя атрибута, который нужно получить, это mail, а не emailaddress.

Решение проблемы

Чтобы получить адрес электронной почты пользователя, необходимо изменить строку подключения к Active Directory на LDAP:// и использовать атрибут mail вместо emailaddress. Вот пример кода на Object Pascal (Delphi), который демонстрирует, как это можно сделать:

uses
  ActiveDs_TLB,
  adshlp;

procedure TMainForm.btnFillInfoClick(Sender: TObject);
var
  Usr: IADsUser;
  lStr: HRESULT;
begin
  // Подключение к AD и попытка извлечь информацию
  lStr := ADsGetObject('LDAP://10.120.200.16/dc=yourdomain,dc=com', IADsUser, Usr); // Замените на ваш домен
  if Succeeded(lStr) then
  begin
    Usr.GetInfo;
    edtEmail.Text := Usr.mail; // Получение адреса электронной почты
  end;
end;

В приведенном выше примере строка подключения изменилась на LDAP://10.120.200.16/dc=yourdomain,dc=com, где yourdomain — это ваш домен. Также атрибут mail используется вместо emailaddress.

Альтернативный ответ

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

uses
  ActiveDs_TLB,
  adshlp;

procedure TMainForm.btnFillInfoClick(Sender: TObject);
var
  Usr: IADsUser;
  lStr: HRESULT;
  EmailAddresses: string;
begin
  // Подключение к AD и попытка извлечь информацию
  lStr := ADsGetObject('WinNT://10.120.200.16/'+edtPRN.Text, IADsUser, Usr); // edtPRN.Text >> sAMAccountName
  if Succeeded(lStr) then
  begin
    Usr.GetInfo;
    EmailAddresses := Usr.otherMailbox; // Получение адресов электронной почты
    if EmailAddresses <> '' then
      edtEmail.Text := EmailAddresses; // Установка адреса электронной почты в поле ввода
  end;
end;

В этом примере атрибут otherMailbox используется для получения адресов электронной почты пользователя. Если несколько адресов электронной почты присутствуют, они будут разделены запятыми. Если атрибут otherMailbox пуст, поле ввода останется без изменений.

Создано по материалам из источника по ссылке.

При работе с Active Directory в Delphi для получения адреса электронной почты пользователя по имени учетной записи (`sAMAccountName`) необходимо использовать провайдер `LDAP://` и атрибут `mail`, а не `WinNT://` и `emailaddress`.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Активные директории ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:26:24/0.0055091381072998/1