如何将Outlook邮件另存为包含类别和其他详细信息的.msg文件?

时间:2017-06-22 06:25:56

标签: vba email outlook outlook-vba

使用MailItem.SaveAs

在Outlook VBA中保存电子邮件很容易

但我没有看到任何保存其他详细信息的选项,例如作者和类别。

第三方程序MessageSave允许以.msg格式保存包含类别和作者的邮件。在Windows资源管理器中,作者和类别列显示与Outlook中相同的信息。

有人知道如何使用Outlook VBA保存邮件,包括这些附加信息吗?

我买了MessageSave,这是一个很好的程序,但他们不允许在VBA中使用他们的保存功能。唯一的解决方法是让MessageSave在消息到达时保存消息。在特定文件夹中。如果有必要,我可以使用此功能,但这只是一种解决方法。

以下是在Windows资源管理器中显示使用MessageSave保存的电子邮件的示例: enter image description here

2 个答案:

答案 0 :(得分:0)

这是我遵循的流程:(win7 64)

网络搜索" windows vba设置扩展文件属性"

首先点击:StackOverfow 16989882

网络搜索:" DSOFile.OleDocumentProperties"

hit microsoft:Dsofile.dll文件允许您在未安装Office时编辑Office文档属性

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

这不是一个错字......它以" when-yo"

结束

下载:DsoFileSetup_KB224351_x86.exe

使用7-zip程序打开DsoFileSetup_KB224351_x86.exe(来自7-zip.org)

将dssoile.dll从DsoFileSetup_KB224351_x86.exe(使用7-zip)复制到文件夹桌面(在此示例中名为" testFiles")(这可能是任何地方......也许是windows system32或syswow64 ..我只在桌面上试过了)

以管理员身份打开命令提示符窗口

导航到包含dsofile.dll的文件夹

执行以下命令:regsvr32 dsofile.dll

应该收到成功确认

启动outlook ... vba编辑器...工具...参考

并找到" DSO OLE文档属性读取器2.1"并选中左侧的方框

回到vba编辑器...创建新模块

粘贴如下:(这只是一个最小的测试脚本)

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

复制(拖放)电子邮件" myMessage"从outlook到文件夹(在本例中为桌面)

右键单击文件夹列标题...点击更多...查找"主题" ... 单击复选框

运行脚本

主题栏应包含"我的主题"在myMessage.msg旁边(或者你的消息被命名)

可能有一种更简单的方法......也许Windows PowerShell有一个可以从vba调用的命令

答案 1 :(得分:-1)

这是一个更实用的脚本

没有错误检查

不检查重复的消息名称

不检查非法文件名(":"字符除外)

只需在任何outlook文件夹中选择一堆电子邮件并运行此

' 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