在企业邮件归档分析或电子取证场景中,我们经常需要用Python直接读取Outlook生成的PST文件,并从中判断这个邮箱档案属于谁。PST文件是Outlook的本地个人文件夹格式,内部以树状结构存储邮件、日历和联系人。通过开源库可以不必启动Outlook就完成解析。

准备工作与库选择
目前比较成熟的Python库是 pypff(也叫 libpff 的Python绑定),它支持读取PST和OST文件。可以使用pip安装:
pip install pypff
打开PST并遍历根文件夹
使用 pypff 打开文件后,先获取根文件夹,再递归查找邮件。邮箱所有者信息往往藏在顶层属性或发件人字段中。
import pypff
def open_pst(path):
# 打开PST文件
pst = pypff.file()
pst.open(path)
root = pst.get_root_folder()
return pst, root
def walk(folder, depth=0):
# 递归遍历文件夹与邮件
for item in folder.sub_items:
if item.number_of_sub_items > 0:
walk(item, depth + 1)
else:
# 尝试读取发件人
try:
sender = item.get_plain_text_body()
except Exception:
sender = None
print('邮件主题:', item.get_subject())
pst, root = open_pst('sample.pst')
walk(root)
pst.close()如何识别邮箱所有者
仅凭单封邮件不足以确认所有者,通常要结合以下线索:
- 顶层文件夹的显示名称,常包含用户姓名
- 已发送邮件箱中的发件人地址,基本就是本人邮箱
- PST元数据里的账户配置字段
我们可以专门扫描“已发送邮件”文件夹,提取发件人地址:
def find_owner(root):
owner_set = set()
# 假设已发送箱名字中含 Sent Items
for item in root.sub_items:
name = item.get_name()
if name and 'Sent' in name:
for mail in item.sub_items:
try:
addr = mail.get_transport_headers()
# 简单截取From行
for line in addr.split('n'):
if line.lower().startswith('from:'):
owner_set.add(line.strip())
except Exception:
pass
return owner_set
owners = find_owner(root)
print('可能的邮箱所有者:', owners)注意事项
某些PST文件经过加密或来自新版Outlook,可能需要更新 pypff 版本。若解析失败,也可考虑使用 readpst 命令行工具先转成mbox再处理。识别所有者时,建议综合多个文件夹的发件人域名与显示名,避免误判。
实际项目中,将解析出的发件人域名与公司通讯录比对,能更准确锁定邮箱所有者身份。
小结
通过Python的 pypff 库,我们能够快速打开PST文件、遍历邮件并提取发件人信息,从而识别邮箱所有者。掌握上述方法,可以让邮件归档分析工作更加自动化。
Pythonpstparseoutlook_pst修改时间:2026-07-29 17:00:44