3

我正在使用以下内容将邮件移动到 Outlook 中的文件夹。

Dim chemin() as String

chemin = Split(path, "/")
Set myNameSpace = Application.GetNamespace("MAPI")
Set myFolder = myNameSpace.Folders("LiveLink").Folders("Livelink HQE").Folders("Entreprise").Folders(chemin(1)).Folders(chemin(2)).Folders(chemin(3))

myEntryID = myFolder.EntryID
myEntryID = myFolder.StoreID

objMail.Move myNameSpace.GetFolderFromID(myEntryID, storeID)    

一切实际上都在工作。如您所见,该文件夹位于 Livelink 中。而且Livelink服务器实际上响应很慢,我对此无能为力。

我担心的是多次使用 .Folders() 而执行类似 .Folders() 的操作会快很多.Folders("Livelink/root/folder1/folder2/")。但这显然不起作用,并且因为 .Folders 命令每次都需要 ping Livelink 服务器,实际上执行这行代码需要整整 10 秒(文件夹越深,到达的时间越长它)。

有没有其他方法可以直接访问 Outlook 中的特定文件夹来移动邮件?我知道每个文件夹(甚至 Livelink 中的文件夹)都有某种 Outlook ID,但我看不到任何使用它的方法。我已经尝试了以下方法,但它还没有工作:

Dim folder As MAPIFolder
Dim myNameSpace As Outlook.NameSpace
Set myNameSpace = Application.GetNamespace("MAPI")
Set folder = myNameSpace.GetFolderFromID(target, Application.GetNamespace("MAPI").Folders("LiveLink").storeID)

在执行 GetFolderfromID() 时,这给了我一个错误。vartarget实际上是我要将邮件复制到的文件夹的 EntryID。

4

1 回答 1

3

根据官方文档,没有比您正在做的更好的方法了,除非您需要多次查找该文件夹。

MSDN 建议的一个选项是从文件夹路径获取文件夹对象,但这基本上与您已经在做的事情相同。

问题是文件夹对象仅代表“在文件夹树的一个级别的特定子集中表示所有可用的 Outlook 文件夹。”(强调添加)

一种可能的解决方法是使用NameSpace.GetFolderFromID,但为此您需要知道EntryID,可能还有StoreID,这通常意味着无论如何您都必须先找到文件夹。但是您可以保存EntryIDandStoreID以供将来立即调用。

如果您想深入了解如何使用EntryIds 和s,请参阅有关使用 EntryIDs 和 StoreIDsStoreID的开发人员参考。

于 2012-09-27T15:38:18.507 回答