如何使用Python解析/读取Outlook PST文件?

6
在互联网上搜索使用Python访问Outlook PST文件的结果很少(而且大部分显示内容已过时)。有人知道如何使用库读取PST文件吗?不幸的是,我不足以通过自己构建PST阅读器来完成此操作,需要借助某个库。
我的目标是获取以下内容的信息:
  • 每个文件夹中的项目数
  • 项的类型(邮件、会议、联系人等)
  • 项目的大小
  • 包括大小在内的附件
  • 可能还有其他元数据,例如日期、收件人等(可选)
我已经尝试了以下方法:
  1. libpff / pypff:崩溃,并似乎在执行操作之前将整个文件读入内存(这不是一个好的解决方案,因为PST文件保存在缓慢的网络存储上)。
  2. Libratom:和libpff一样的问题。
  3. Libpst:不清楚如何使用/作为二进制文件提供(没有说明如何安装)/参见该帖子的回答/似乎未得到维护或更新。
  4. win32(将PST挂载到Outlook中):一个教程展示了如何将PST挂载到本地安装的Outlook中,并使用MAPI访问获取其内容,但这也非常缓慢,不是一个好的解决方案,因为需要Outlook。
  5. Asponse Email Python:一开始很有前途,尽管文档不是很好(没有Python示例/不同的命名方式,例如PersonalStorage对象和许多其他对象/每个文件夹仅限50个项目(可能是免费版本的限制,但由于缺乏出版商网站的解释而不明确)。
这是来自Asponse网站的示例:
personalStorage = PersonalStorage.from_file(dataDir + "Outlook.pst")

folderInfoCollection = personalStorage.root_folder.get_sub_folders()

for folderInfo in folderInfoCollection:

    print("Folder: " + folderInfo.display_name)
    print("Total Items: " + str(folderInfo.content_count))
    print("Total Unread Items: " + str(folderInfo.content_unread_count))
    print("----------------------")

我进行了大量的谷歌搜索,找到了适合的导入语句来使代码运行。

有人有稳定清晰的方法来读取Outlook PST文件吗?即使使用Asponse解决方案也可以超过50个项目的限制。


这个问题之前已经被问过并因为同样的原因而关闭。我投票支持关闭。https://dev59.com/BnA75IYBdhLWcg3wm6ix - Grismar
6
那是11年前的事了!由于那个时候没有进展吗? - Ulrich
@Grismar 最有说服力的是在关联问题中的评论(来自2017年初,即在OP七年后):“请取消关闭以便我可以分享我的新解决方案” - Joshua Voskamp
请注意,尝试直接访问 .pst 文件并不是微软推荐或支持的做法 - 您可以直接访问邮件服务器,或使用在 Outlook 上实现的 API(如 Outlook Mail REST API)来访问邮件。 - Grismar
2
@Grismar - 我不确定你在哪里看到微软推荐这样做:PST是一种本地电子邮件存储机制,与Exchange邮箱完全无关,可以使用EWS或Graph访问。你是在想OST吗? - Dmitry Streblechenko
显示剩余2条评论
1个回答

1

Redemption(我是它的作者)可以是另一个选择-它是Extended MAPI的包装器,因此您仍然需要安装Outlook(用于其MAPI系统),但与Outlook Object Model不同,它可以从服务中使用,并且不需要启动outlook.exe和/或将PST文件添加到用户的默认配置文件。您可以使用RDOSession.LogonPstStore(它创建并删除一个临时配置为使用指定PST文件的配置文件)和/或RDOSession.Stores.AddPstStore将PST文件添加到现有会话中(例如由Outlook使用或由LogonPstStore创建)。


谢谢!我会试一试的... - Ulrich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接