Consulting

Results 1 to 3 of 3

Thread: Save E-mail Attachments

  1. #1

    Save E-mail Attachments

    Hi all,

    I am using Ron de Bruins code http://www.rondebruin.nl/win/s1/outlook/saveatt.htm to put emails in a folder and then copy them and put them in a network folder. It works perfectly except I would like to delete the attachments from the email so that they don't get re-processed. If there are two attachments in an e-mail, the code that I have added (highlighted below) deletes the first attachment but then when it looks for the second attachment it says that there is none there. I think that by deleting the first attachment it is throwing the attachment indexing out?

    Sub Test()
    'Arg 1 = Folder name of folder inside your Inbox
    'Arg 2 = File extension, "" is every file
    'Arg 3 = Save folder, "C:\Users\Ron\test" or ""
    '        If you use "" it will create a date/time stamped folder for you in your "Documents" folder
    '        Note: If you use this "C:\Users\Ron\test" the folder must exist.
    
    
        'SaveEmailAttachmentsToFolder "MyFolder", "xls", ""
        SaveEmailAttachmentsToFolder "MyFolder", "", "C:\FilesIn\"
        
    End Sub
    
    
    
    
    Sub SaveEmailAttachmentsToFolder(OutlookFolderInInbox As String, _
                                     ExtString As String, DestFolder As String)
        Dim ns As Namespace
        Dim Inbox As MAPIFolder
        Dim SubFolder As MAPIFolder
        Dim Item As Object
        Dim Atmt As Attachment
        Dim FileName As String
        Dim MyDocPath As String
        Dim I As Integer
        Dim wsh As Object
        Dim fs As Object
    
    
        On Error GoTo ThisMacro_err
    
    
        Set ns = GetNamespace("MAPI")
        Set Inbox = ns.GetDefaultFolder(olFolderInbox)
        Set SubFolder = Inbox.Folders(OutlookFolderInInbox)
    
    
        
        
        I = 0
        
    
        
        ' Check subfolder for messages and exit of none found
        If SubFolder.Items.Count = 0 Then
            MsgBox "There are no messages in this folder : " & OutlookFolderInInbox, _
                   vbInformation, "Nothing Found"
            Set SubFolder = Nothing
            Set Inbox = Nothing
            Set ns = Nothing
            Exit Sub
        End If
    
    
        'Create DestFolder if DestFolder = ""
        If DestFolder = "" Then
            Set wsh = CreateObject("WScript.Shell")
            Set fs = CreateObject("Scripting.FileSystemObject")
            MyDocPath = wsh.SpecialFolders.Item("mydocuments")
            DestFolder = MyDocPath & "\" & Format(Now, "dd-mmm-yyyy hh-mm-ss")
            If Not fs.FolderExists(DestFolder) Then
                fs.CreateFolder DestFolder
            End If
        End If
    
    
        If Right(DestFolder, 1) <> "\" Then
            DestFolder = DestFolder & "\"
        End If
    
    
        ' Check each message for attachments and extensions
        For Each Item In SubFolder.Items
            For Each Atmt In Item.Attachments
                If LCase(Right(Atmt.FileName, Len(ExtString))) = LCase(ExtString) Then
                    FileName = DestFolder & Item.SenderName & " " & Atmt.FileName
                    Atmt.SaveAsFile FileName
                    
                    'THIS IS CODE THAT I HAVE ADDED          
    
                    Atmt.Delete
    
                    'END MY CODE
    
    
                                    
                                    
                                    
                    I = I + 1
                    
                   
                    
                
                End If
                
            
                
            Next Atmt
        Next Item
    
    
        ' Show this message when Finished
        If I > 0 Then
           MsgBox "You can find the files here : " _
                 & DestFolder, vbInformation, "Finished!"
        Else
            MsgBox "No attached files in your mail.", vbInformation, "Finished!"
        End If
    
    
        ' Clear memory
    ThisMacro_exit:
        Set SubFolder = Nothing
        Set Inbox = Nothing
        Set ns = Nothing
        Set fs = Nothing
        Set wsh = Nothing
        Exit Sub
    
    
        ' Error information
    ThisMacro_err:
        MsgBox "An unexpected error has occurred." _
             & vbCrLf & "Please note and report the following information." _
             & vbCrLf & "Macro Name: SaveEmailAttachmentsToFolder" _
             & vbCrLf & "Error Number: " & Err.Number _
             & vbCrLf & "Error Description: " & Err.Description _
             , vbCritical, "Error!"
        Resume ThisMacro_exit
    
    
                   
    
    
    
    
    End Sub

  2. #2
    You need to process the attachments in reverse order e.g. as follows. Note that your code has the potential to overwrite existing attachment files with the same names

    Sub SaveEmailAttachmentsToFolder(OutlookFolderInInbox As String, _
                                     ExtString As String, DestFolder As String)
    Dim ns As NameSpace
    Dim Inbox As MAPIFolder
    Dim SubFolder As MAPIFolder
    Dim Item As MailItem
    Dim Atmt As Attachment
    Dim FileName As String
    Dim MyDocPath As String
    Dim i As Integer, j As Integer
    Dim wsh As Object
    Dim fs As Object
    
    
        On Error GoTo ThisMacro_err
        Set ns = GetNamespace("MAPI")
        Set Inbox = ns.GetDefaultFolder(olFolderInbox)
        Set SubFolder = Inbox.folders(OutlookFolderInInbox)
    
        ' Check subfolder for messages and exit of none found
        If SubFolder.Items.Count = 0 Then
            MsgBox "There are no messages in this folder : " & OutlookFolderInInbox, _
                   vbInformation, "Nothing Found"
            Set SubFolder = Nothing
            Set Inbox = Nothing
            Set ns = Nothing
            Exit Sub
        End If
    
    
        'Create DestFolder if DestFolder = ""
        If DestFolder = "" Then
            Set wsh = CreateObject("WScript.Shell")
            Set fs = CreateObject("Scripting.FileSystemObject")
            MyDocPath = wsh.SpecialFolders.Item("mydocuments")
            DestFolder = MyDocPath & "\" & Format(Now, "dd-mmm-yyyy hh-mm-ss")
            If Not fs.FolderExists(DestFolder) Then
                fs.CreateFolder DestFolder
            End If
        End If
    
    
        If Right(DestFolder, 1) <> "\" Then
            DestFolder = DestFolder & "\"
        End If
    
        i = 0
        ' Check each message for attachments and extensions
        For Each Item In SubFolder.Items
            If Item.Attachments.Count > 0 Then
                For j = Item.Attachments.Count To 1 Step -1
                    Set Atmt = Item.Attachments(j)
                    If LCase(Right(Atmt.FileName, Len(ExtString))) = LCase(ExtString) Then
                        FileName = DestFolder & Item.SenderName & " " & Atmt.FileName
                        Atmt.SaveAsFile FileName
                        Item.Attachments.Remove j
                        i = i + 1
                    End If
                Next j
                Item.Close olSave
            End If
        Next Item
    
        ' Show this message when Finished
        If i > 0 Then
            MsgBox "You can find the files here : " _
                   & DestFolder, vbInformation, "Finished!"
        Else
            MsgBox "No attached files in your mail.", vbInformation, "Finished!"
        End If
    
        ' Clear memory
    ThisMacro_exit:
        Set SubFolder = Nothing
        Set Inbox = Nothing
        Set ns = Nothing
        Set fs = Nothing
        Set wsh = Nothing
        Exit Sub
    
        ' Error information
    ThisMacro_err:
        MsgBox "An unexpected error has occurred." _
               & vbCrLf & "Please note and report the following information." _
               & vbCrLf & "Macro Name: SaveEmailAttachmentsToFolder" _
               & vbCrLf & "Error Number: " & Err.Number _
               & vbCrLf & "Error Description: " & Err.Description _
               , vbCritical, "Error!"
        Resume ThisMacro_exit
    End Sub
    Graham Mayor - MS MVP (Word) 2002-2019
    Visit my web site for more programming tips and ready made processes
    http://www.gmayor.com

  3. #3
    Hi Graham,

    That worked perfectly, thank you. Noted on the file names being potentially overwritten, I will overcome this by adding the date, time, second etc. at the end of the file name that is being saved out. I am marking this as solved.

    Thanks,

    Des

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •