我们为Outlook创建了一个外接程序,用于将无效的电子邮件存档到硬盘驱动器位置。一切正常,除了因时间超过6个月(或使用的设置)而无法在Outlook文件夹中显示的电子邮件之外。
由于不希望更改设置以在服务器上显示所有电子邮件,因此,我宁愿尝试在文件夹级别的插件中进行设置,或者采用另一种解决方法来仍然复制不可见的电子邮件
For i = 1 To NumberOfFolders
FolderTitle = objFolder.Folders(i).Name.ToString
FolderTitle = RemoveSpecialChars(FolderTitle)
Dim FolderPath As String
FolderPath = Link & FolderTitle & "\"
If Not System.IO.Directory.Exists(FolderPath) Then
MkDir(Link & FolderTitle)
End If
emailorder = 0
For Each Item In objFolder.Folders(i).Items
emailorder = emailorder + 1
Title = Strings.Right("000" & emailorder, 4) & " - " & RemoveSpecialChars(Item.Subject)
path = FolderPath & Title & ".msg"
Item.SaveAs(path)
ProgressValue = ProgressValue + 1
ProgressBarArchiving.Value = ProgressValue
Next
objFolder.Folders(i).Delete()
NumberOfFolders = objFolder.Folders.Count
If NumberOfFolders > 0 Then
i = 0
Else
MsgBox(ProgressValue & " e-mails archived")
Me.Close()
Exit Sub
End If
Next
因此,我正在寻找一种解决方案,可以查找和复制用户在Outlook中不可见的电子邮件,或者可以使所有电子邮件在文件夹级别可见以复制所有电子邮件而不会造成过载带有很多旧电子邮件的邮箱。
作为测试,我创建了以下内容(msgbox只是为了查看会发生什么情况:
Dim Session As RDOSession = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = app.Session.MAPIOBJECT
Dim store As RDOExchangeMailboxStore = Session.Stores.DefaultStore
Dim storeID As String = store.EntryID
MsgBox("StoreID: " & storeID)
Dim FolderTest As RDOFolder
FolderTest = Session.PickFolder()
Dim FolderTestID As String = FolderTest.EntryID
MsgBox("FolderTestID: " & FolderTestID)
Dim MAPI_NO_CACHE As Integer
'Dim MAPI_BEST_ACCESS As Integer
Dim FolderTest2 As RDOFolder = Session.GetFolderFromID(FolderTest.EntryID,, MAPI_NO_CACHE)
Dim NumItems As Long = FolderTest2.Items.Count
MsgBox("NumItems: " & NumItems)
For Each Item In FolderTest2.Items
MsgBox(Item.Subject)
Next
答案 0 :(得分:0)
在扩展MAPI级别(仅C ++或Delphi)上,您需要绕过缓存存储以在线模式打开文件夹-您可以通过在调用{{1}时使用MAPI_NO_CACHE标志来做到这一点。 }。然后,您致电IMAPIFolder::GetContentsTable时,将从远程服务器获取文件夹中的所有项目。
如果没有C ++或Delphi选项,则可以使用Redemption(任何语言)-您可以创建RDOSession对象的实例,并将其IMsgStore::OpenEntry
属性设置为{{ 1}},以确保两者共享相同的MAPI会话,然后调用RDOSession.MAPIOBJECT
并指定文件夹条目ID以及Application.Session.MAPIOBJECT
(0x200)或与RDOSesssion/RDOStore.GetFolderFromID
(0x10 )标志以在线模式打开文件夹。另一个优势是您可以在辅助线程中运行该代码(OOM不允许您这样做)。
您还可以使用“兑换”来确定是否确实需要在联机模式下打开文件夹-RDOExchangeMailboxStore。MAPI_NO_CACHE
/ MAPI_BEST_ACCESS
。如果为DaysToKeepOffline
,则所有项目都将被缓存,并且可以从本地缓存存储区进行访问,而无需在联机模式下打开父文件夹。