当Outlook 2016使用缓存Exchange模式时,GetExchangeUser()返回null

时间:2019-04-05 13:27:37

标签: c# outlook vsto exchange-server

开发:Outlook 2016 加载项:VSTO(C#)

我的公司正在O365(Exchange)上运行,并且我正在开发一个加载项,该加载项收集他们的交换用户信息并执行各种操作。但是,当Outlook帐户设置配置为启用了缓存Exchange模式时,GetExchangeUser()返回null。

如果禁用客户端缓存Exchange模式,则一切正常。但是,我的公司希望保留此功能。

我的粗略理解是,GetExchangeUser()仅在连接到Exchange Server时才起作用。我怀疑缓存模式导致这种情况一直都不是,因此该方法失败了。所以我想知道..

  • 如何强制(临时)Outlook连接到Exchange,以便GetExchangeUser()工作?
  • 是否有其他收集Exchange用户信息的方法?

    // Create a singleton of the Application instance.
    Outlook.Application app = new Outlook.Application();
    
    // Get the current user object.
    Outlook.ExchangeUser currentUser = app.Session.CurrentUser.AddressEntry.GetExchangeUser();
    
    // ***** currentUser == null when "Use Cached Exchange Mode" is enabled.
    // ***** currentUser == Outlook.ExchangeUser object when "Use Cached Exchange Mode" is disabled.
    
    // Set the form details.
    textBoxName.Text = currentUser.Name;
    textBoxEmployeeID.Text = currentUser.Alias;
    

我尝试了一些在网上找到的建议,但都没有奏效。例如..

  • 强制进行脱机通讯簿更新(不起作用)。
  • 删除旧的脱机通讯簿,然后强制进行更新(无效)。

1 个答案:

答案 0 :(得分:1)

请记住,ExchageUser对象(从AddressEntry.GetExchageUser()返回)不会暴露您无法从AddressEntry.PropertyAccessort.GetProperty()得到的任何东西。

验证数据是否确实存在-您可以从OutlookSpy中进行操作:单击OutlookSpy功能区上的“命名空间”按钮。展开CurrentUser属性,展开AddressEntry,选择MAPIOBJECT属性,单击“浏览”。在IMailUser窗口中,您是否看到了所需的所有MAPI属性?如果选择一个属性,OutlookSpy将显示其DASL名称。您可以在调用AddressEntry.PropertyAccessort.GetProperty()时使用该DASL属性名称。