有没有一种方法可以使用Python Win32com模块来读取任何本地PST文件并将邮件导出为MSG文件?

2 人关注

我正在做一个两阶段的数字取证项目,在第一阶段,我需要提取存储在几个Outlook的PST/OST文件中的所有信息,并将它们保存为MSG文件,在一个文件夹层次结构中,如pstFilename/inbox, draft, sent...为样本中的每个PST文件。

在第二阶段,现在已经完成,我使用python(3.x)和Win32Com模块来遍历目标文件夹内的所有子文件夹,搜索和散列每个MSG文件,解析一些MSG属性,最后,创建一个CSV报告。我找到了很多使用python和Win32Com模块解析MSG文件的文档和代码样本,但对于如何解析一个单一的PST文件,而不是本地计算机上与Outlook的用户配置文件相关的PST文件,却没有找到。

我正在寻找一种方法,使用win32Com模块打开一个PST文件,遍历其中的所有文件夹,并将每条信息作为MSG文件导出/保存到相应的pstfilename_folder/subfolder。

有一个非常直接的方法来访问MSG文件。

import win32com.client outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") msg = outlook.OpenSharedItem(r"/test_files/test.msg") print(msg.SenderName) print(msg.SenderEmailAddress) print(msg.SentOn) print(msg.To) print(msg.CC) print(msg.BCC) print(msg.Subject) print(msg.Body) count_attachments = msg.Attachments.Count if count_attachments > 0: for item in range(count_attachments): print(msg.Attachments.Item(item + 1).Filename) del outlook, msg

有什么同等的方法可以使用win32com模块访问和操作PST文件吗?

I found this link: https://learn.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook.store?view=outlook-pia

but I not sure how to use it in python...

python
outlook
win32com
msg
pst
HIC
HIC
发布于 2019-08-05
2 个回答
Joe Cole
Joe Cole
发布于 2019-11-30
已采纳
0 人赞同

这是我想为自己的应用做的事情。我能够从这些来源拼凑出一个解决方案。

  • https://gist.github.com/attibalazs/d4c0f9a1d21a0b24ff375690fbb9f9a7
  • https://github.com/matthewproctor/OutlookAttachmentExtractor
  • https://learn.microsoft.com/en-us/office/vba/api/outlook.namespace
  • 我的解决方案并没有像您在问题中要求的那样保存.msg文件,但除非您有输出文件的次要用途,否则这个解决方案应该可以为您节省一个步骤。

    import win32com.client
    def find_pst_folder(OutlookObj, pst_filepath) :
        for Store in OutlookObj.Stores :
            if Store.IsDataFileStore and Store.FilePath == pst_filepath :
                return Store.GetRootFolder()
        return None
    def enumerate_folders(FolderObj) :
        for ChildFolder in FolderObj.Folders :
            enumerate_folders(ChildFolder)
        iterate_messages(FolderObj)
    def iterate_messages(FolderObj) :
        for item in FolderObj.Items :
            print("***************************************")
            print(item.SenderName)
            print(item.SenderEmailAddress)
            print(item.SentOn)
            print(item.To)
            print(item.CC)
            print(item.BCC)
            print(item.Subject)
            count_attachments = item.Attachments.Count
            if count_attachments > 0 :
                for att in range(count_attachments) :
                    print(item.Attachments.Item(att + 1).Filename)
    Outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
    pst = r"C:\Users\Joe\Your\PST\Path\example.pst"
    Outlook.AddStore(pst)
    PSTFolderObj = find_pst_folder(Outlook,pst)
    try :
        enumerate_folders(PSTFolderObj)
    except Exception as exc :
        print(exc)
    finally :
        Outlook.RemoveStore(PSTFolderObj)
        
    Taki
    Taki
    发布于 2019-11-30
    0 人赞同

    我在我的工作中使用了独立软件的MSG PY模块,现在看来效果很好。 这是用于Python的Microsoft Outlook .msg文件模块。 该模块允许你轻松创建/阅读/解析/转换Outlook .msg文件。

    from independentsoft.msg import Message
    appointment = Message("e:\\appointment.msg")
    print("subject: " + str(appointment.subject))
    print("start_time: " + str(appointment.appointment_start_time))
    print("end_time: " + str(appointment.appointment_end_time))
    print("location: " + str(appointment.location))
    print("is_reminder_set: " + str(appointment.is_reminder_set))
    print("sender_name: " + str(appointment.sender_name))
    print("sender_email_address: " + str(appointment.sender_email_address))