【问题标题】:Get Inboxes from Outlook从 Outlook 获取收件箱
【发布时间】:2011-10-14 12:17:35
【问题描述】:

我在 Outlook 2010 中配置了两个 Exchange 帐户,但是我不知道如何访问第二个帐户的收件箱。 Session.GetDefaultFolder() 总是返回第一个。

即使枚举 Session.Accounts,找到正确的帐户并调用 Session.Account(found one).Store.GetDefaultFolder() 也会返回错误的收件箱(来自默认交换帐户,而不是辅助帐户)。

【问题讨论】:

  • 很想知道我的代码是否适合你。

标签: vba outlook outlook-addin


【解决方案1】:

这会显示所有可用的收件箱吗?

Sub LoopThroughInboxes

Dim ol As Outlook.Application
Dim ns As Outlook.NameSpace
Dim i As Long

Set ol = Outlook.Application
Set ns = ol.GetNamespace("MAPI")

For i = 1 To ns.Folders.Count
 Debug.Print ns.Folders(i).Name
Next i

如果是这样,那么ns.Folders(i).Folders("Inbox") 将为您提供每个邮箱的收件箱。

【讨论】:

    【解决方案2】:

    使用Store.GetDefaultFolder 而不是Namespace.GetDefaultFolder。 请注意,Store.GetDefaultFolder 是在 Outlook 2010 中添加的。在早期版本的 Outlook 中,使用扩展 MAPI(C++ 或 Delphi)或Redemption (RDOStore.GetDefaultFolder)。

    【讨论】:

      【解决方案3】:

      也许你早就放弃了这个问题,但是这里……

      我之前也遇到过同样的问题,我通过添加 Outlook 帐户管理 API 解决了这个问题。不幸的是,这是一个面向 c++ 的 API。 (我的插件已经用c++开发了)

      此外,VBA 和 .NET 插件使用的 OOM(Outlook 对象模型)对多个帐户的支持很差(如果有的话)。通过添加交换帐户,您实际上已将多个帐户添加到您的个人资料中。

      因此,您可能需要降低一个级别,将 MAPI 与 c++ 结合使用,然后挂钩 Outlook 帐户管理 API。工作量很大,但这正是我所做的,而且效果很好。

      另外,这里有一个例子: http://www.codeproject.com/KB/IP/IOlkAccountManager.aspx

      【讨论】:

        【解决方案4】:

        转到 Mapix 库

        Mapix 库链接如下所示

        Mapix library for C++/MFC

        注意:此库适用于 MS Outlook 中的收件箱电子邮件

        【讨论】:

          【解决方案5】:

          我猜这是一个旧的,但有一天可能有人需要它。 这是迭代 Outlook 中所有“已发送邮件”文件夹的代码。 (我认为这仅适用于 Outlook 2010 及更高版本)。

          MSOutlook._NameSpace ns = Globals.ThisAddIn.Application.GetNamespace("MAPI");
          var accounts = ns.Accounts;
          foreach (MSOutlook.Account account in accounts)
          {
              try
              {
                  // You might want to test if DeliveryStore is null, in case this account is not an Exchange account
                  MSOutlook.MAPIFolder sentFolder = account.DeliveryStore.GetDefaultFolder(MSOutlook.OlDefaultFolders.olFolderSentMail);
                  if(sentFolder != null)
                  {
                      SentItems = sentFolder.Items;
                      SentItems.ItemAdd += LogMethods.Items_Sent_ItemAdd;
                  }
              }
              catch (Exception e)
              {
                  BaseClass.log.Log(LoggLevel.Warning, e.Message);
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2020-10-06
            • 2016-05-04
            • 1970-01-01
            • 2015-02-08
            • 2018-10-27
            • 2012-02-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多