如何使用Rest API(非MAPI)连接到Outlook 2016 VBA上的特定电子邮件帐户

如何使用Rest API(非MAPI)连接到Outlook 2016 VBA上的特定电子邮件帐户,vba,outlook,exchange-server,office-2016,Vba,Outlook,Exchange Server,Office 2016,我当前正在使用Windows 7、Outlook 2010和Exchange MAPI帐户。 几个用户有他们的个人帐户+几个通用帐户(一些具有完全访问权限,一些为只读) 用户在VBA中执行宏以连接到特定的邮件地址/帐户,以根据不同的条件读取和检查收件箱中的传入邮件 此代码用于连接MAPI帐户并将文件夹设置为邮件帐户的收件箱: Dim ns As Outlook.NameSpace Dim Inbox As Outlook.Folder Set ns = GetNamespace("MAPI")

我当前正在使用Windows 7、Outlook 2010和Exchange MAPI帐户。 几个用户有他们的个人帐户+几个通用帐户(一些具有完全访问权限,一些为只读) 用户在VBA中执行宏以连接到特定的邮件地址/帐户,以根据不同的条件读取和检查收件箱中的传入邮件

此代码用于连接MAPI帐户并将文件夹设置为邮件帐户的收件箱:

Dim ns As Outlook.NameSpace
Dim Inbox As Outlook.Folder
Set ns = GetNamespace("MAPI")
Set Inbox = ns.Folders.Item("jon.doe@example.com").Folders("Inbox")
现在,IT部门决定将其服务器升级到Exchange 2016。 这些帐户将不使用
MAPI
。它说他们现在使用
restapi

我想这就是我现在在Outlook和Exchange 2016以及现在的Windows 10上执行上述代码时收到此错误消息的原因。

我在网上找到了几种解决方案,但它们都需要Visual Studio+加载项/库。我想用VBA实现这一点,同时连接到邮件帐户和收件箱,因此在没有Visual Studio的情况下,C#

致意

扬科

现在,IT部门决定将其服务器升级到Exchange 2016。这些帐户将不使用MAPI。它说他们现在使用RESTAPI

这在技术上是不正确的Exchange 2016还不支持新的Outlook Rest API(尽管已宣布将在将来引入该API)。如果您使用Office365,则可以使用REST。另一种适用于任何Exchange版本的替代方法是使用EWS

另一件需要指出的事情是,无论Exchange版本为20102016还是Office365,Outlook都使用MAPI连接到Exchange(以及各种功能的EWS)。版本之间的区别在于连接方法,例如2016年默认情况下,HTTP上的Mapi是was RPC/HTTP(Outlook Anywhere)早期版本中的首选连接机制。它是相同的协议,只是不同的传输,但从Outlook代码/客户端的角度来看,一旦创建了配置文件并建立了连接,它就相对透明了。有一件事是行不通的,那就是尝试直接与Exchange 2016(或2013)建立RPC/Mapi连接。理论上,如果所有邮箱都托管在同一个组织中,但IT部门告诉您的是不正确的,那么VBA代码仍然可以工作(除非他们特别禁用了那些邮箱上的MAPI,而您可以在早期版本的Exchange中执行此操作)

现在IT决定将他们的服务器升级到Exchange 2016。这些帐户将不使用MAPI。IT表示他们现在使用REST API

这在技术上是不正确的Exchange 2016尚不支持新的Outlook Rest API(尽管已宣布将在将来引入该API)。如果您使用Office365,则可以使用Rest。另一种适用于任何Exchange版本的替代方法是使用EWS


另一件需要指出的事情是,无论Exchange版本是20102016还是Office365,Outlook都使用MAPI连接到Exchange(以及各种功能的EWS)。版本之间的区别在于连接方法,例如2016年默认情况下,HTTP上的Mapi是was RPC/HTTP(Outlook Anywhere)中以前版本中的首选连接机制。相同的协议只是不同的传输,但从Outlook代码/客户端的角度来看,在创建配置文件并建立连接后,该协议相对透明。一件不起作用的事情是尝试直接与Exchange 2016(或2013)建立RPC/Mapi连接。理论上,如果所有邮箱都托管在同一个组织中,但IT部门告诉您的信息不正确,则VBA代码仍应有效(除非他们专门禁用了这些邮箱上的MAPI,而您可以在以前版本的Exchange中执行此操作).

好的,我明白了。现在我有一个不同的问题。如何使用Outlook VBA访问邮箱,如果我运行此“for each loop”,则不包括这些问题。为会话中的每个OAAccount设置帐户集ns=GetNamespace(“MAPI”)。帐户调试。打印vbCr和“OAAccount:”&oAccount下一步我只看到那些邮箱,我也可以直接在“帐户选项”下看到这些邮箱。所有自动添加的邮箱和其他邮箱都没有列在Debug.Print.Ok中。我知道了。现在我有一个不同的问题。如何使用Outlook VBA访问邮箱,如果运行此操作,这些邮箱将不包括在内“for each loop”.Dim oAccount As account Set ns=GetNamespace(“MAPI”)用于会话中的每个oAccount.Accounts Debug.Print vbCr&“oAccount:“&oAccount下一步我只看到那些邮箱,我也可以直接在“帐户选项”下看到这些邮箱。所有自动添加的邮箱和其他邮箱都未在Debug.Print中列出。”。