Exchange Web 服务有一个ResolveNames()函数,我可以使用它来检索(除其他外)通过 EWS 登录到 Exchange Server 的 Active Directory 用户的主 SMTP 地址。
我现在正在通过 OLE 针对 Outlook 进行编程,并且想要相同的功能。
我一直在浏览Outlook 对象模型,但找不到合适的对象或方法。
有谁知道我可以用来获取主 SMTP 地址的对象/方法?
下面是我用来连接到 Outlook 的当前 Delphi 代码。
对于登录的默认用户 (AUserSMTP=''),它返回 OutlookApp COM 对象(通过 GetActiveOleObject 或 CreateOleObject)、一个名称空间(通过GetNameSpace)和一个文件夹(通过 GetDefaultFolder)对象,但我找不到从那里去的地方.
我认为 lNameSpace.CurrentUser (一个Recipient 对象)可能会导致某个地方,但它的 Address 属性只返回一个字符串,如'/o=TimeTell/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=developer'没有电子邮件地址。 ..
关于要走的路线有什么建议吗?
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;