Video Screencast Help

VBA: Extracting mail attachements from archived mails

Created: 24 Jul 2013 • Updated: 24 Jul 2013 | 5 comments
2D's picture
This issue has been solved. See solution.

Like many others, i had a problem extracting attachement from archived mail items.

The name of the attachement is "@"  instead of the actual file name.

It was suggested in a particular mail to use the API, but you need EVAdmin to do so. (CreateObject("EnterpriseVault.ContentManagementAPI") failed)

Another suggestion was to read the HTMLbody of the mail and search for the filename.

After a little research, i found that, if you "Display" the mailitem, it will be accessible as any other mailitem, including the attachements.

Here's the code:

  • Private Function GetSelectedMailAttach() As String
  •     Dim olApp As Outlook.Application
  •     Dim olExp As Outlook.Explorer
  •     Dim olSel As Outlook.Selection
  •     Dim olItem As Outlook.MailItem
  •     Dim olAtt As Outlook.Attachment
  •     Dim olInsp As Outlook.Inspector
  •     Dim olSelItem As Outlook.MailItem
  •     Dim olOpnItem As Outlook.MailItem
  •     Dim i As Long
  •     Dim strRet As String
  •     On Error GoTo ErrorHandler
  •     Set olApp = GetObject("", "Outlook.Application")
  •     Set olExp = olApp.ActiveExplorer
  •     Set olSel = olExp.Selection
  •     If olSel.Count = 0 Then
  •         MsgBox "No mailitems selected!", vbExclamation
  •         GoTo Finalize
  •     End If
  •     For i = 1 To olSel.Count
  •         Set olInsp = Nothing
  •         Set olSelItem = olSel.item(i)
  •         olSelItem.Display
  •         Do While olInsp Is Nothing
  •             Set olInsp = olApp.ActiveInspector
  •         Loop
  •         Set olOpnItem = olInsp.CurrentItem
  •         For Each olAtt In olOpnItem.Attachments
  •             If olAtt.Type <> olOLE Then
  •                 olAtt.SaveAsFile Environ("TEMP") & "\" & olAtt.DisplayName
  •                 If strRet = "" Then
  •                     strRet = Environ("TEMP") & "\" & olAtt.FileName
  •                 Else
  •                     strRet = strRet & vbCrLf & Environ("TEMP") & "\" & olAtt.FileName
  •                 End If
  •             End If
  •         Next
  •         olOpnItem.Close olDiscard
  •     Next
  •     If strRet = "" Then
  •         MsgBox "No attachements found in selected mails!", vbExclamation
  •     End If
  •     GetSelectedMailAttach = strRet
  •     GoTo Finalize
  • ErrorHandler:
  •     MsgBox Err.Description, vbCritical
  • Finalize:
  •     Set olAtt = Nothing
  •     Set olItem = Nothing
  •     Set olSel = Nothing
  •     Set olExp = Nothing
  •     Set olApp = Nothing
  •     Set olInsp = Nothing
  •     Set olSelItem = Nothing
  •     Set olOpnItem = Nothing
  • End Function
Operating Systems:

Comments 5 CommentsJump to latest comment

Arjun Shelke's picture

Well are you saying the actual name of attachment is "@" or you see that in shortcut/archived item. If you see this behaviour in OWA, then its due to the OWA extensions issue.

EV_Ajay's picture


The following TechNote is useful, I think which describe your issue :

The attachment list in Microsoft Outlook shows an @ sign instead of the actual attachments for an archived item.



JesusWept3's picture

Fwiw it's just an FYI post for other people's benefit
There was a similar question not so long ago from a user who wanted to find attachment names but it was EV shortcuts messing it up

Good job on the script!

2D's picture

Thanks for the quick response!

As JesusWept3 said, it's a FYI post on a problem i had with EV shorcuts attachement names.

To illustrate the problem:Object Info.png

Arjun Shelke's picture

Hey 2D, thanks for sharing the information. I thought you require solution to this scenario.

Just FYI, If you dont need solution, then while posting it, you can select "I do not need a solution (just sharing information)"