VBA Outlook 2019 //标记在指定文件夹中读取的所有电子邮件

问题描述 投票:0回答:1

因此,我正在尝试使Outlook 2019可用。

我有一个IMAP帐户设置,很遗憾,我无法取消订阅某些文件夹,例如垃圾邮件(我认为这是很愚蠢的,因为其他电子邮件客户端允许这样做)。该垃圾邮件文件夹由服务器管理,因此每天我会收到25封电子邮件。为了使它在Outlook中保持干净,我想将该文件夹中的所有电子邮件标记为已读,并且在Outlook上处于打开状态,并且随时在其中弹出任何电子邮件。

您能帮我通过VBA做到这一点吗?

以下不是我的代码,我在stackoverflow上找到了它,只是将第一条IF语句更改为仅进入Spam文件夹,但是它在第三或第四之后给我“数组索引超出范围”错误(80020009)迭代(因此最多删除3封电子邮件),并且代码中断。

我们不仅仅将自己固定在Spam文件夹上,我们可以使其更通用,如果需要,只需在代码中替换文件夹名称?

Sub MarkAllItemsAsRead()
Dim objStores As Outlook.Stores
Dim objStore As Outlook.Store
Dim objOutlookFile As Outlook.Folder
Dim objFolder As Outlook.Folder

'Process all Outlook files
Set objStores = Outlook.Application.Session.Stores

For Each objStore In objStores
    Set objOutlookFile = objStore.GetRootFolder

    For Each objFolder In objOutlookFile.Folders
        'Process mail folders
        If objFolder.DefaultItemType = olMailItem And objFolder.Name = "Spam" Then
            Debug.Print objFolder.Name
           Call ProcessFolders(objFolder)
        End If
    Next
Next
End Sub

Sub ProcessFolders(ByVal objCurFolder As Outlook.Folder)
Dim objUnreadItems As Outlook.Items
Dim i As Integer
Dim objItem As Object
Dim objSubFolder As Outlook.Folder

Set objUnreadItems = objCurFolder.Items.Restrict("[Unread]=True")

'Mark all unread emails as read
For i = 1 To objUnreadItems.Count
    Set objItem = objUnreadItems.Item(i)
    objItem.UnRead = False
    objItem.Save
Next

End Sub
vba directory outlook imap
1个回答
0
投票

简单地反转迭代顺序可能会解决您的问题。

(可能发生的情况是,当您更改消息时,服务器希望提供更多帮助,并将消息移至其他位置,一旦完成,“消息号2”现在就是“消息号1”。 。从最高编号开始处理它们应该可以解决,因为如果编号最高的消息消失了,则不会重新编号其他消息。

[IMAP提供了解决它的更好方法(通过一个命令设置所有读取,或者通过UID而不是通过序列号指定它们,但是反转迭代顺序是很小的变化,并且可能会起作用。

© www.soinside.com 2019 - 2024. All rights reserved.