使用VBA在Outlook 2003中循环遍历PST文件

3
在Outlook 2007中,我可以使用以下代码循环遍历邮件存储(包括PST):
Dim stores As Outlook.stores
Set stores = objNamespace.stores
Dim store As Outlook.store

For Each store In stores
    MsgBox store.FilePath
Next

但是,在Outlook 2003中,没有Outlook.store和Outlook.stores对象。

在Outlook 2003中是否有等效的对象? 我可以使用哪些其他方法来循环邮件存储?

谢谢。


你在每个商店里做了什么具体的事情吗?你可以循环遍历 Outlook 2003 中的每个邮箱,但根据你要做什么,可能有可能不可行。 - JimmyPena
首先,我想用商店显示名称、商店文件路径和商店ID填充一个列表框。然后用户将从列表中选择一个商店并单击按钮。这将把StoreID保存在一个字符串变量中。然后,我将使用NameSpace.GetItemFromID方法获取MailItem。最后,我将调用MailItem.Display。 - Jacob Quisenberry
1个回答

4
此 Outlook 2003 示例代码将遍历高级邮箱并将某些属性打印到“立即窗口”。我根据您的要求选择了看起来最有用的属性。
Sub LoopThruMailboxes()

Dim olApp As Outlook.Application
Dim olNS As Outlook.NameSpace
Dim mailboxCount As Long
Dim i As Long
Dim folder As Outlook.MAPIFolder

' get local namespace
Set olApp = Outlook.Application
Set olNS = olApp.GetNamespace("MAPI")

mailboxCount = olNS.Folders.count

For i = 1 To mailboxCount
  Set folder = olNS.Folders(i)

  Debug.Print folder.EntryID
  Debug.Print folder.StoreID
  Debug.Print folder.Name
  Debug.Print folder.FolderPath
Next i

End Sub

folder.Name 是邮箱的名称,folder.StoreID 是存储 ID(我不确定你所说的“存储文件路径”是什么意思,我也没有看到任何相关的东西)。

下面是一个函数化的版本,它将文件夹名称和存储 ID 作为数组返回,您可以直接将其分配给列表框:

Function GetMailBoxInfo() As String()

Dim olApp As Outlook.Application
Dim olNS As Outlook.NameSpace
Dim mailboxCount As Long
Dim i As Long
Dim folder As Outlook.MAPIFolder
Dim tempString() As String

' get local namespace
Set olApp = Outlook.Application
Set olNS = olApp.GetNamespace("MAPI")

mailboxCount = olNS.Folders.count

' size array accordingly
ReDim tempString(1 To mailboxCount, 1 To 2)

For i = 1 To mailboxCount
  Set folder = olNS.Folders(i)

  tempString(i, 1) = folder.Name
  tempString(i, 2) = folder.StoreID
Next i

  GetMailBoxInfo = tempString

End Function

示例:

ListBox1.List = GetMailBoxInfo

谢谢。通过存储文件路径,我指的是PST文件的路径和文件名,例如C:\ test.pst。 - Jacob Quisenberry
在这种情况下,这个链接可能会有帮助:https://dev59.com/2kXRa4cB1Zd3GeqPsHt7 - JimmyPena
我将无法使用Redemption DLL。我将无法控制执行机器上的软件,除了它将运行Outlook 2003。我需要专门使用VBA。 - Jacob Quisenberry
那个页面提到了Redemption,但是代码示例没有使用它。 - JimmyPena
1
这是谜题的最后一块拼图!那段代码告诉我,存储ID包括邮件存储的绝对路径的ANSI代码点。我从来没有想到过。这也解释了为什么StoreID可能因机器而异,以及为什么StoreID的长度不是一个常数。太棒了。 - Jacob Quisenberry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接