如何不预先了解Outlookversion(2010、2013、2016等)如何从Service应用程序登录

时间:2019-05-21 11:35:42

标签: delphi outlook-redemption

我正在编写一个服务应用程序,该应用程序应监视一个或多个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引发:
    1. EOleSysError:预期的HTTP_STATUS_REDIRECT,已收到403
    2. EIdDnsResolverError:DNS服务器报告查询名称错误
    3. EHTTPError:来自https://autodiscover.domain.com/autodiscover/autodiscover.xml的HTTP错误401
    4. EOleSysError:GetAutodiscoverUrlFromDns错误:使用xx.xx.xx.xx的DNS查找错误:DNS服务器报告查询名称错误
    5. EOleSysError:GetAutodiscoverForEmailAddress:该地址中AD中没有自动发现服务器

1 个答案:

答案 0 :(得分:2)

请记住,LogonExchangeMailbox以旧的RPC模式连接到服务器,而最新的Exchange Server版本不再支持该模式。

您需要为Exchange 2013/2016/2019使用LogonHostedExchangeMailbox-它以HTTP-PRC或MAPI-HTTP模式连接。要使LogonHostedExchangeMailbox正常运行,您至少需要具有Outlook 2010 SP2、2013 SP1或2016/2019。