我正在编写一个服务应用程序,该应用程序应监视一个或多个ExchangeMailbox的传入邮件,以对这些邮件执行某些操作。
该服务将在不同的环境中运行,这意味着我需要支持Outlook 2010至2019。
无论Outlook版本如何,如何从服务应用程序可靠地登录会话?
我有以下代码适用于Outlook 2010,但不适用于2016。 ExchangeServer相同,并使用版本2010。
for MailboxName in MailboxesToMonitor do
begin
Session := RedemptionLoader.new_RDOSession;
Session.LogonExchangeMailbox(MailboxName, 'ExchangeServerName'); // works for 2010, but not 2016
DefaultStore := Session .Stores.DefaultStore;
if (LDefaultStore.StoreKind in [skPrimaryExchangeMailbox, skDelegateExchangeMailbox]) then
begin
MailboxStore := TRDOExchangeMailBoxStore.Create(Self);
try
MailboxStore.ConnectTo(DefaultStore as IRDOExchangeMailboxStore);
MailboxStore.OnNewMail := RDOStoreOnNewMail;
except
LMailboxStore.Free;
raise;
end;
Sessions.Add(Session);
end;
end;
Session.LogonExchangeMailbox
在安装Outlook 2016时引发 MAPI_E_UNKNOWN_FLAGS 错误。Session.Logon
在ServiceApplication中不起作用。Session.LogonHostedExchangeMailbox
引发:
https://autodiscover.domain.com/autodiscover/autodiscover.xml
的HTTP错误401 答案 0 :(得分:2)
请记住,LogonExchangeMailbox
以旧的RPC模式连接到服务器,而最新的Exchange Server版本不再支持该模式。
您需要为Exchange 2013/2016/2019使用LogonHostedExchangeMailbox
-它以HTTP-PRC或MAPI-HTTP模式连接。要使LogonHostedExchangeMailbox正常运行,您至少需要具有Outlook 2010 SP2、2013 SP1或2016/2019。