提问人:Possdawgers 提问时间:10/24/2023 最后编辑:Eugene AstafievPossdawgers 更新时间:10/24/2023 访问量:32
使用 win32com 遍历来自收件箱和特定子文件夹的邮件
Iterate Though Messages from Inbox and Specific Subfolder with win32com
问:
谁能告诉我如何能够从我的收件箱和收件箱的指定文件夹中组装一个包含特定日期之后的邮件项目的对象?我知道如何分别从每个项目中获取这些物品,但我不确定如何将它们组合在一起。
这是必需的,因为存在将邮件移动到文件夹的 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})
我需要从这两个对象的消息进行迭代,但如果可能的话,将它们合并到一个可迭代对象中会更容易。
有人有想法吗?
答:
0赞
Dmitry Streblechenko
10/24/2023
#1
你不能这样做 - Outlook 不是关系数据库,你不能从两个文件夹创建联接。
但是,没有什么可以阻止您创建一个长度等于两个集合之和的数组,并用两个集合中的项填充该数组/列表。
评论
1赞
Possdawgers
10/24/2023
是的,我认为可能是这种情况。我猜是时候填充一个 numpy 数组了。
0赞
Eugene Astafiev
10/24/2023
#2
您需要使用允许从多个文件夹中获取项目的类的方法。在 Outlook 中使用该方法的主要好处是:AdvancedSearch
Application
AdvancedSearch
- 搜索在另一个线程中执行。您无需手动运行另一个线程,因为该方法会在后台自动运行它。
AdvancedSearch
- 可以在任何位置搜索任何项目类型:邮件、约会、日历、便笺等,即超出某个文件夹的范围。和 / 方法可以应用于特定集合(请参阅 Outlook 中类的属性)。
Restrict
Find
FindNext
Items
Items
Folder
- 完全支持 DASL 查询(自定义属性也可用于搜索)。为了提高搜索性能,如果为商店启用了即时搜索,则可以使用即时搜索关键字(请参阅类的属性)。
IsInstantSearchEnabled
Store
- 您可以随时使用类的方法停止搜索过程。
Stop
Search
在我十多年前为技术博客撰写的文章中阅读更多相关信息 - 以编程方式在 Outlook 中进行高级搜索:C#、VB.NET。
评论