【问题标题】:Loop Through PSTs in Outlook 2003 with VBA在 Outlook 2003 中使用 VBA 循环遍历 PST
【发布时间】:2011-12-23 22:03:22
【问题描述】:

在 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 中的每个邮箱,但取决于您正在执行的操作,这可能会也可能不会。
  • 首先我想用商店显示名称、商店文件路径和商店 ID 填充一个列表框。然后用户将从列表中选择一个商店并单击一个按钮。这会将 StoreID 保存在字符串变量中。然后,我将使用 NameSpace.GetItemFromID 方法来获取 MailItem。最后,我将调用 MailItem.Display。

标签: vba outlook pst outlook-2003


【解决方案1】:

此 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
  • 在这种情况下,此链接可能会有所帮助:stackoverflow.com/questions/195849/…
  • 我将无法使用 Redemption DLL。除了运行 Outlook 2003 之外,我无法控制执行机器上的软件。我需要专门使用 VBA。
  • 该页面提到了 Redemption,但代码示例没有使用它。
  • 这是拼图的最后一块!该代码告诉我,存储 ID 包括邮件存储绝对路径的 ANSI 代码点。我永远也猜不到。这也解释了为什么 StoreID 可能因机器而异,以及为什么 StoreID 的长度不是常数。杰出。
猜你喜欢
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
相关资源
最近更新 更多