如何使用Python的MAPI从非默认PST文件的指定文件夹获取邮件
如何切换目标PST文件访问指定文件夹
你的问题出在GetDefaultFolder方法默认只会访问默认数据文件(通常是Outlook的主PST)的对应文件夹。要访问其他PST,需要先定位到该PST对应的Store对象,再通过它获取目标文件夹。
步骤1:确认所有已加载的PST名称
先运行这段代码,列出Outlook中所有已加载的数据文件(包括PST),找到你要访问的目标PST的显示名称:
import win32com.client outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") # 遍历所有已加载的数据文件 for store in outlook.Stores: print(f"数据文件名称: {store.DisplayName}")
步骤2:定位目标PST并访问指定文件夹
根据上一步得到的目标PST名称,替换下面代码中的target_pst_name,即可访问该PST下的指定文件夹:
import win32com.client outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") # 替换为你的目标PST显示名称 target_pst_name = "你的目标PST名称" target_store = None # 遍历Stores找到目标PST for store in outlook.Stores: if store.DisplayName == target_pst_name: target_store = store break if target_store: # 方式1:从PST根目录开始访问子文件夹 root_folder = target_store.GetRootFolder() # 替换为你要访问的文件夹名称 target_folder = root_folder.Folders["Test Folder"] print(f"成功获取文件夹: {target_folder.Name}") # 方式2:直接获取该PST的默认收件箱,再访问其子文件夹 # pst_inbox = target_store.GetDefaultFolder(6) # 6对应收件箱的枚举值 # target_folder = pst_inbox.Folders["Test Folder"] else: print(f"未找到名称为'{target_pst_name}'的PST文件")
关键说明
- 每个PST文件在Outlook中对应一个
Store对象,outlook.Stores包含所有已加载的数据文件 Store.DisplayName是PST在Outlook左侧导航栏显示的名称,必须完全匹配才能找到目标PST- 如果要访问PST的默认文件夹(如收件箱、已发送邮件),可以用
Store.GetDefaultFolder(文件夹枚举值),枚举值和GetDefaultFolder一致(比如6=收件箱,5=已发送)
内容的提问来源于stack exchange,提问作者Nikola
相关产品推荐
相关产品推荐

