Delphi-从active directory获取用户电子邮件地址

Delphi-从active directory获取用户电子邮件地址,delphi,active-directory,Delphi,Active Directory,我试图使用Active Directory中的sAMAccountName获取用户的电子邮件地址,但收到以下错误消息: 在缓存中找不到目录属性 我可以获得全名、部门和自由裁量权,但为什么我在电子邮件中会收到此错误 uses ActiveDs_TLB, adshlp; procedure TMainForm.btnFillInfoClick(Sender: TObject); var Usr: IAdsUser; lStr: HRESULT; xStrg: string; C

我试图使用Active Directory中的
sAMAccountName
获取用户的电子邮件地址,但收到以下错误消息:

在缓存中找不到目录属性

我可以获得全名、部门和自由裁量权,但为什么我在电子邮件中会收到此错误

uses
  ActiveDs_TLB, adshlp;

procedure TMainForm.btnFillInfoClick(Sender: TObject);
var
  Usr: IAdsUser;
  lStr: HRESULT;
  xStrg: string;
  ChkPRN: string;
  RemoveDot: string;
begin
  //connect to AD and try exrtact the info /
  lStr := ADsGetObject('WinNT://10.120.200.16/'+edtPRN.Text, IADsUser, usr); // edtPRN.Text >> sAMAccountName
  if Succeeded(lStr) then
  begin
    Usr.GetInfo;
    EmpFullName := Usr.FullName;
    RemoveDot := StringReplace(EmpFullName, '.', '',[rfReplaceAll, rfIgnoreCase]);
    xStrg := Usr.FullName;
    edtLastName.Text := GetLastWord(xStrg);
    xStrg := StringReplace(RemoveDot, edtLastName.Text, '',[rfReplaceAll, rfIgnoreCase]);
    EdtMidName.Text := GetLastWord(xStrg);
    xStrg := StringReplace(RemoveDot, EdtMidName.Text, '',[rfReplaceAll, rfIgnoreCase]);
    xStrg := StringReplace(xStrg, edtLastName.Text, '',[rfReplaceAll, rfIgnoreCase]);
    edtFirstName.Text := GetLastWord(xStrg);
    edtEmail.Text := Usr.EmailAddress;  // <<<<< this is the error 
  end;
end;
使用
主动式配电盘、adshlp;
程序TMainForm.BTNFILINFOCLICK(发送方:TObject);
变量
Usr:IAdsUser;
lStr:HRESULT;
xStrg:string;
ChkPRN:字符串;
移除:字符串;
开始
//连接到AD并尝试导出信息/
lStr:=ADsGetObject('WinNT://10.120.200.16/'+edtPRN.Text,IADsUser,usr);//edtPRN.Text>>sAMAccountName
如果成功(lStr),则
开始
Usr.GetInfo;
EmpFullName:=Usr.FullName;
RemoveDot:=StringReplace(EmpFullName,'','',[rfReplaceAll,rfIgnoreCase]);
xStrg:=Usr.FullName;
edtLastName.Text:=GetLastWord(xStrg);
xStrg:=StringReplace(RemoveDot,edtLastName.Text,,[rfReplaceAll,rfIgnoreCase]);
EdtMidName.Text:=GetLastWord(xStrg);
xStrg:=StringReplace(RemoveDot,EdtMidName.Text,,[rfReplaceAll,rfIgnoreCase]);
xStrg:=StringReplace(xStrg,edtLastName.Text,,[rfReplaceAll,rfIgnoreCase]);
edtFirstName.Text:=GetLastWord(xStrg);

edtmail.Text:=Usr.EmailAddress;// 电子邮件地址属性在使用WinNT://provider时不可用,您需要使用LDAP://provider。该属性的名称为“mail”而不是“emailaddress”。这里是到ASDI和Delphi的链接