使用 win32com 迭代收件箱和特定子文件夹中的消息

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

谁能告诉我如何能够从我的收件箱和收件箱的指定文件夹中组装一个包含特定日期之后的邮件项目的对象?我知道如何分别获取每个项目,但我不知道如何组合它们。

这是必要的,因为存在将邮件移动到文件夹的 Outlook 规则,但它只能在 Outlook 打开时运行。通常,我需要的邮件位于文件夹中,但如果规则尚未运行,我也需要从常规收件箱中获取邮件。

这是我到目前为止所拥有的:

import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
root =outlook.Folders.Item(1).Folders('Inbox')

msg_fromdate= '09/03/2023'
filter_time = "[ReceivedTime]>="+"'"+msg_fromdate+" 12:00 AM" +"'"

inbox_messages = root.Items.Restrict(f'{filter_time}')
folder_messages = root.Folders('folder_name').Items.Restrict(f'{filter_time})

我需要从这两个对象的消息进行迭代,但如果可能的话,将它们合并到单个可迭代对象中会更容易。

有人有想法吗?

python outlook win32com office-automation mailitem
2个回答
0
投票

您不能这样做 - Outlook 不是关系数据库,您无法从两个文件夹创建联接。

但是,没有什么可以阻止您创建长度等于两个集合之和的数组,并使用两个集合中的项目填充该数组/列表。


0
投票

您需要使用

AdvancedSearch
类的
Application
方法,该方法允许从多个文件夹中获取项目。在 Outlook 中使用
AdvancedSearch
方法的主要好处是:

  • 搜索是在另一个线程中执行的。您不需要手动运行另一个线程,因为
    AdvancedSearch
    方法会在后台自动运行它。
  • 可以在任何位置(即超出特定文件夹的范围)搜索任何项目类型:邮件、约会、日历、笔记等。
    Restrict
    Find
    /
    FindNext
    方法可应用于特定的
    Items
    集合(请参阅 Outlook 中
    Items
    类的
    Folder
    属性)。
  • 完全支持 DASL 查询(自定义属性也可用于搜索)。为了提高搜索性能,如果商店启用了即时搜索,则可以使用即时搜索关键字(请参阅
    IsInstantSearchEnabled
    类的
    Store
    属性)。
  • 您可以使用
    Stop
    类的
    Search
    方法随时停止搜索过程。

请阅读我十多年前为技术博客撰写的文章中了解更多相关内容 - 以编程方式在 Outlook 中进行高级搜索:C#、VB.NET

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