从 Outlook 邮件中提取压缩文件

Posted

技术标签:

【中文标题】从 Outlook 邮件中提取压缩文件【英文标题】:Extract Zipped file from Outlook mail 【发布时间】:2017-07-17 14:18:52 【问题描述】:

我正在尝试从我的 Outlook 邮件中提取一个 zip 文件。

以下是我的脚本,但它抛出了一个错误对象变量或未设置块变量。

开启

oApp.NameSpace((FileNameFolder)).CopyHere oApp.NameSpace((Atchmt.FileName)).Items

我如何解决它。

Sub Unzip()
Dim ns As NameSpace
Dim Inbox As MAPIFolder
Dim SubFolder As MAPIFolder
Dim Atchmt As Attachment
Dim FileName As String
Dim msg As Outlook.MailItem
Dim FileNameFolder As String
Dim FSO As Object               'variables for unzipping
Dim oApp As Object

Set ns = GetNamespace("MAPI")
Set Inbox = ns.GetDefaultFolder(olFolderInbox)
Set SubFolder = Inbox.Folders("TEST")

For Each msg In SubFolder.Items
   If msg.UnRead = True Then
        If LCase(msg.Subject) Like "*motor*" Then
            For Each Atchmt In msg.Attachments
                If (Right(Atchmt.FileName, 3) = "zip") Then
                MsgBox "1"
                        FileNameFolder = "C:\Users\xxxx\Documents\test\"
                        Set oApp = CreateObject("Shell.Application")
                        oApp.NameSpace((FileNameFolder)).CopyHere oApp.NameSpace((Atchmt.FileName)).Items

                End If
            Next
        End If
    End If
Next
End Sub

【问题讨论】:

哪一行报错了? oApp.NameSpace((FileNameFolder)).CopyHere oApp.NameSpace((Atchmt.FileName)).Items 先保存压缩包再解压 是的,它按照你说的方式工作,但我只想要 csv 文件 解压文件后,终止 zip 文件。如果您需要有关如何终止 zip 的示例,请告诉我。 【参考方案1】:

先尝试保存压缩文件然后解压,如果你想delete压缩文件然后尝试Kill (zippath & zipname )

    Dim TempFile As String

    For Each msg In SubFolder.Items
       If msg.UnRead = True Then
            If LCase(msg.Subject) Like "*motor*" Then
                For Each Atchmt In msg.Attachments
                    If (Right(Atchmt.FileName, 3) = "zip") Then
'                    MsgBox "1"
                        FileNameFolder = "C:\Temp\Folders\"

                        Debug.Print FileNameFolder ' Immediate Window
                        Debug.Print Atchmt.FileName ' Immediate Window

                        TempFile = FileNameFolder & Atchmt.FileName

                        Atchmt.SaveAsFile TempFile

                        Set oApp = CreateObject("Shell.Application")
                        oApp.NameSpace((FileNameFolder)).CopyHere oApp.NameSpace((Atchmt.FileName)).Items

                        Kill (TempFile)

                    End If
                Next
            End If
        End If
    Next

【讨论】:

这很有魅力!感谢您的帮助。【参考方案2】:

将 msg 声明为通用对象 - 您可以在收件箱中包含 MailItem 以外的对象,例如 ReportItemMeetingItem

【讨论】:

新的错误是什么?引发该异常的代码的确切行是什么? oApp.NameSpace((FileNameFolder)).CopyHere oApp.NameSpace((Atchmt.FileName)).Items - 未设置块变量 - 这是错误 你永远不会检查 oApp.NameSpace(第一个或第二个)是否真的返回了一个有效的对象。

以上是关于从 Outlook 邮件中提取压缩文件的主要内容,如果未能解决你的问题,请参考以下文章

尝试从 Outlook 存档电子邮件文件

使用ColdFusion从Outlook .msg文件中提取附件

如何从压缩文件中提取一个文件

从python中的tar存档中提取压缩的gz文件

Outlook 将图像显示为在邮件的 HTML 正文中引用的附件

从 PST 文件中提取电子邮件和附件