如何使用 VBA 列出存储 Outlook 邮件项目的所有文件夹?

如何使用 VBA 列出存储 Outlook 邮件项目的所有文件夹?

我已使用 IMAP 将 Gmail 导入 Outlook,现在正在运行一些 VBA 报告脚本。Gmail 标签已转换为 Outlook 中的文件夹,来自 Gmail 的带有多个标签的邮件项目似乎存储在 Outlook 中的多个文件夹中。我试图返回 mailitem.parent 属性,但它只列出了活动邮件项目的父级。即如果我在“测试类别”文件夹中搜索,它只会返回“测试类别”,即使这些邮件也在收件箱和其他文件夹中。

For Each olItem In olFolder.Items
On Error Resume Next
If olItem.MessageClass = "IPM.Note" Then
Set olMail = olItem
Debug.Print olMail.Parent
...

答案1

Gmail 的 IMAP 相当复杂。由于 Gmail 不支持文件夹(IMAP 要求),因此它通过向电子邮件客户端(如 Outlook)提供标签名称来模拟文件夹。当您在电子邮件上有多个标签时,它实际上会为每个 IMAPI“文件夹”提供电子邮件消息的副本。从 Outlook 和任何其他 IMAP 客户端的角度来看,这些消息是不同的。如果您删除其中一个“文件夹”中的电子邮件,Gmail 只会从中删除标签。如果您要修改其中一个“文件夹”中的电子邮件(例如,编辑主题),Gmail 将创建电子邮件的实际副本,您会在 gmail.com 上看到它。这些电子邮件唯一共同的唯一标识符是 PR_INTERNET_MESSAGE_ID MAPI 属性(http://schemas.microsoft.com/mapi/proptag/0x1035001F)。

因此,如果您确实想从一封特定电子邮件中收集所有 Gmail 标签,则需要检索http://schemas.microsoft.com/mapi/proptag/0x1035001F使用 PropertyAccessor 属性,然后根据此属性值在所有邮箱中搜索以查找匹配的电子邮件。即使这样,您也可能无法获得所有结果,因为并非所有 Gmail 标签都可以通过 IMAP 访问,并且并非所有 IMAP 文件夹都可能同步。

相关内容