Rufen Sie die SMTP-Adresse des angemeldeten Outlook-Benutzers nach dem Herstellen einer Verbindung über OLE ab

Exchange-Webdienste hat einResolveNames () Funktion, mit der ich (unter anderem) die primäre SMTP-Adresse für den Active Directory-Benutzer abrufen kann, der sich über EWS bei Exchange Server angemeldet hat.

Ich programmiere jetzt durch OLE gegen Outlook und möchte die gleiche Funktionalität.

Ich habe das durchgeblättertOutlook-Objektmodell kann aber kein passendes Objekt oder eine Methode finden.

Kennt jemand ein Objekt / eine Methode, mit der ich die primäre SMTP-Adresse ermitteln kann?

Unten sehen Sie den aktuellen Delphi-Code, mit dem ich eine Verbindung zu Outlook herstelle.
Für die Standardbenutzeranmeldung (AUserSMTP = '') wird das OutlookApp-COM-Objekt (über GetActiveOleObject oder CreateOleObject) zurückgegebenNameSpace (über GetNameSpace) und aMappe (über GetDefaultFolder) Objekt, aber ich konnte nicht finden, wohin ich von dort gehen soll.
Ich dachte, lNameSpace.CurrentUser (aEmpfängerobjekt) könnte irgendwohin führen, aber seine Address-Eigenschaft gibt nur eine Zeichenfolge wie zurück'/ o = TimeTell / ou = Exchange-Verwaltungsgruppe (FYDIBOHF23SPDLT) / cn = Empfänger / cn = Entwickler' ohne email adresse ...

Irgendwelche Vorschläge zur Route?

function TDataModuleSyncOutlook.ConnectToOutlook(AUserSMTP: String = ''): Boolean;
var
   lNameSpace, lRecipient: OleVariant;
begin
   Result      := false;
   FWasCreated := False;  
   try
      FOutlookApp := GetActiveOleObject(scxOutlookApp);
      Result := True;
   except
      try
         FOutlookApp := CreateOleObject(scxOutlookApp);
         FWasCreated := True;
         Result := True;
      except
         on E:Exception do ...
      end;
   end;
   if Result then      
   begin
      lNameSpace := FOutlookApp.GetNameSpace(scxNameSpace);
      if AUserSMTP <> '' then   // This part not applicable to the question   
      begin   // Open shared calendar als er een expliciete gebruiker is opgegeven...
         lRecipient := lNameSpace.CreateRecipient(AUserSMTP);
         try
            FCalendarFolder := lNameSpace.GetSharedDefaultFolder(lRecipient, olFolderCalendar);
         except
            on E:Exception do ...
         end;
      end
      else   // ... anders de default calendar folder openen
         FCalendarFolder := lNameSpace.GetDefaultFolder(olFolderCalendar);
   end;
   FOleInitialized := Result;
   if Result then TSyncLogger.LogAlways('Connected to Outlook') else TSyncLogger.LogAlways('Connection to Outlook failed');
end;

Antworten auf die Frage(2)

Ihre Antwort auf die Frage