How to save Outlook mails as .msg file with categories and other details?

一笑奈何 提交于 2020-06-28 06:20:03

问题


It is easy to save emails in Outlook VBA with MailItem.SaveAs

But I don't see any option to save additional details like i.e. the Author and Categories.

The 3rd party program MessageSave allows to save mails with Categories and Author in .msg format. In Windows Explorer the columns Author and Categories show the same information like in Outlook.

Does anybody know how to save messages using Outlook VBA including these additional information?

I bought MessageSave and it's a good program but they don't allow their save function to be used in VBA. The only workaround is to let MessageSave save messages when they "arrive" in a specific folder. If necessary I can use this function but this is just a workaround.

Here is a sample how the emails saved with MessageSave are shown in Windows Explorer:


回答1:


here is a process i followed: (win7 64)

web search "windows vba set extended file property"

first hit: StackOverfow 16989882

web search: "DSOFile.OleDocumentProperties"

hit microsoft: The Dsofile.dll files lets you edit Office document properties when you do not have Office installed

https://support.microsoft.com/en-us/help/224351/the-dsofile.dll-files-lets-you-edit-office-document-properties-when-yo

that is not a typo ... it ends in "when-yo"

download: DsoFileSetup_KB224351_x86.exe

open DsoFileSetup_KB224351_x86.exe using 7-zip program (from 7-zip.org)

copy dsofile.dll from DsoFileSetup_KB224351_x86.exe (using 7-zip) into a folder desktop (named "testFiles" in this example) (this could be anywhere ... maybe windows system32 or syswow64 ... i only tried on desktop )

open command prompt window as administrator

navigate to folder that contains dsofile.dll

execute following: regsvr32 dsofile.dll

should receive success confirmation

start outlook ... vba editor ... tools ... references

and find "DSO OLE Document Properties Reader 2.1" and check the box on left

back to vba editor ... create new module

paste in the following: (this is just a minimal test script)

Sub extendedProperties()

    Dim objFile As OleDocumentProperties
    Set objFile = CreateObject("DSOFile.OleDocumentProperties")

    objFile.Open ("C:\Users\js\Desktop\testFiles\myMessage.msg")  ' adjust to match your system
    objFile.SummaryProperties.Subject = "My Subject"
    objFile.Save

    Set objFile = Nothing
End Sub

copy (drag&drop) an email "myMessage" from outlook to folder (on desktop in this example)

right-click on folder column header ... click on more ... find "subject" ... click checkbox

ran script

subject column should contain "My Subject" next to myMessage.msg (or whatever your message is named)

there may be a simpler way ... maybe windows PowerShell has a command that could be called from vba




回答2:


here is a more usable script

it has no error checking

no check for duplicate message names

no check for illegal filenames (except for ":" character)

just select a bunch of emails in any outlook folder and run this

' make sure you have a reference to "DSO OLE Document Properties Reader"

Sub extendedProperties()

    Dim msg As mailItem
    Dim objFile As OleDocumentProperties

'   Set objFile = CreateObject("DSOFile.OleDocumentProperties")
    Set objFile = New OleDocumentProperties

    Dim fileName As String
    Dim subjectText As String

    ' !!!!!!!! select a bunch of messages before running this !!!!!!!!

    For Each msg In ActiveExplorer.Selection

        subjectText = Replace(msg.Subject, ":", "_")   ' get rid of illegal file name character (there are others)

        ' adjust the destination folder for your liking
        fileName = "C:\Users\js\Desktop\testFiles\" & subjectText & ".msg"

        Debug.Print fileName

        msg.SaveAs fileName

        objFile.Open fileName
        objFile.SummaryProperties.Subject = "My Subject"
        'objFile.Save
        objFile.Close True     ' save and close   !!!!! duplicate filenames get overwritten !!!!!

'   stop                       ' uncomment this line and the code will stop. press F5 to run, F8 to single-step

    Next msg

    Set msg = Nothing
    Set objFile = Nothing

End Sub


来源:https://stackoverflow.com/questions/44691692/how-to-save-outlook-mails-as-msg-file-with-categories-and-other-details

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!