本文介绍了VBA/Outlook 从 .eml 文件中提取附件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试获取一个充满带有附件的 .eml 消息的文件夹,然后将附件提取/重命名/保存到另一个文件夹中.我的代码:

I'm trying to take a folder full of .eml messages with attachments and then extract/rename/save the attachments in another folder. My code :

Sub SaveAttachments()
    Dim OlApp As Outlook.Application
    Set OlApp = GetObject(, "Outlook.Application")
    Dim MsgFilePath
    Dim Eml As Outlook.MailItem
    Dim att As Outlook.Attachments
    Dim Path As String
    Path = "C:\Users\richard\Desktop\Inbox\"

    If OlApp Is Nothing Then
        Err.Raise ERR_OUTLOOK_NOT_OPEN
    End If

    Dim fs As Object
    Set fs = CreateObject("Scripting.FileSystemObject")
    Dim temp As Object
    Set temp = fs.GetFolder(Path)

    For Each MsgFilePath In temp.Files
        Set Eml = OlApp.CreateItemFromTemplate(Path & MsgFilePath.Name)

    Set att = Eml.Attachments
        If att.Count > 0 Then
            For i = 1 To att.Count
                fn = "C:\Users\richard\Desktop\cmds\" & Eml.SenderEmailAddress
                att(i).SaveAsFile fn
            Next i
        End If


        Set Eml = Nothing
    Next

    Set OlApp = Nothing
End Sub

但是我在循环中的第一个文件上直接得到这个错误,即行设置 Eml = OlApp.CreateItemFromTemplate(Path & MsgFilePath.Name) :

But I'm getting straightaway this error on the first file in the loop, ie the lineSet Eml = OlApp.CreateItemFromTemplate(Path & MsgFilePath.Name) :

-2147286960 (80030050)    %1 already exists.

任何关于正在发生的事情的想法都非常感谢!

Any ideas on what is going on much appreciated !

推荐答案

试试这个(TRIED AND TESTED)

Try this (TRIED AND TESTED)

Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As _
String, ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Const SW_SHOWNORMAL As Long = 1
Private Const SW_SHOWMAXIMIZED As Long = 3
Private Const SW_SHOWMINIMIZED As Long = 2

Sub SaveAttachments()
    Dim OlApp As Outlook.Application
    Set OlApp = GetObject(, "Outlook.Application")
    Dim MsgFilePath
    Dim Eml As Outlook.MailItem
    Dim att As Outlook.Attachments
    Dim sPath As String
    sPath = "C:\Users\richard\Desktop\Inbox\"

    If OlApp Is Nothing Then
        Err.Raise ERR_OUTLOOK_NOT_OPEN
    End If

    sFile = Dir(sPath & "*.eml")

    Do Until sFile = ""
        ShellExecute 0, "Open", sPath & sFile, "", sPath & sFile, SW_SHOWNORMAL

        Wait 2

        Set MyInspect = OlApp.ActiveInspector
        Set Eml = MyInspect.CurrentItem

        Set att = Eml.Attachments
        If att.Count > 0 Then
            For i = 1 To att.Count
                fn = "C:\Users\richard\Desktop\cmds\" & i & "-" & Eml.SenderEmailAddress
                att(i).SaveAsFile fn
            Next i
        End If

        sFile = Dir$()
    Loop

    Set OlApp = Nothing
End Sub

Private Sub Wait(ByVal nSec As Long)
    nSec = nSec + Timer
    While nSec > Timer
        DoEvents
    Wend
End Sub

这篇关于VBA/Outlook 从 .eml 文件中提取附件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-09 20:26