Inicio Soporte Técnico VBScript – Guardar Archivos Adjuntos de Correos .MSG Automaticamente (Guardar adjuntos de...

VBScript – Guardar Archivos Adjuntos de Correos .MSG Automaticamente (Guardar adjuntos de correos adjuntos)

3476
0

A solicitud de un usuario hemos creado un Script el cual su funcionamiento es guardar adjuntos de correos adjuntos automáticamente. Este consiste al momento de recibir un correo que contenga correos adjuntos en este, es decir archivos .msg este los va a guardar en una carpeta temporal, va a leer y guardara los adjuntos de cada correo (.msg) en esta carpeta.

También es posible que ya tengas guardados lo correos .msg en una carpeta y deseas extraer los adjuntos de estos puedes hacerlo con el siguiente Script Ver: VBScript – Guardar Archivos Adjuntos de Correos .MSG Ya Guardados en el Disco Duro

Código

Public Sub saveAttachtoDiskAuto(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
Dim dateFormat
Dim extFile As String
Dim saveName As String
Dim comp As String
Dim fso As Object
    dateFormat = Format(Now, "yyyy-mm-dd H-mm")
saveFolder = "C:Temp"
Set fso = CreateObject("Scripting.FileSystemObject")

For Each objAtt In itm.Attachments
    If InStr(objAtt.FileName, ".msg") Then
        saveName = StripIllegalChar(objAtt.FileName)
        objAtt.SaveAsFile saveFolder & "" & saveName
        comp = "yes"
    End If
Next
If (comp = "yes") Then
        SaveMSGAttachments saveFolder
        comp = "no"
        fso.DeleteFile ("C:Temp*.msg") 'Deletes all files with the extension .msg in the folder
    End If
End Sub

Function StripIllegalChar(myAttachment)
    Dim RegX            As Object
       
    Set RegX = CreateObject("vbscript.regexp")
       
    RegX.Pattern = "[" & Chr(34) & "!@#$%^&*()=+|[]{}`';:<>?/,]"
    RegX.IgnoreCase = True
    RegX.Global = True
       
    StripIllegalChar = RegX.Replace(myAttachment, "")
       
ExitFunction:
    Set RegX = Nothing
       
End Function

Function SaveMSGAttachments(saveFolder)
Dim olItem As MailItem
Dim SH As Object
Dim msgFolder
Dim saveFolderAttachments
Dim strFilesFldr As String
Dim strSaveFldr As String
Dim objAtt As Outlook.Attachment
Dim strFilename As String

On Error GoTo Cleanup
Set SH = CreateObject("SHell.Application")

'Set msgFolder = SH.BrowseForFolder(0, "Selecciona el Folder que Contiene los .msg", &H400)
'If msgFolder Is Nothing Then Exit Function
strFilesFldr = saveFolder 'msgFolder.Items.Item.Path & ""

Set saveFolderAttachments = SH.BrowseForFolder(0, "Selecciona el Folder para Guardar los Adjuntos", &H400)
If saveFolderAttachments Is Nothing Then Exit Function
strSaveFldr = saveFolderAttachments.Items.Item.Path & ""

strFilename = Dir$(strFilesFldr & "*.msg")


While Len(strFilename) <> 0
    Set olItem = Application.CreateItemFromTemplate(strFilesFldr & strFilename)
    If olItem.Attachments.Count > 0 Then
        For Each objAtt In olItem.Attachments
           If ((InStr(objAtt.DisplayName, ".pdf") Or InStr(objAtt.DisplayName, ".xml"))) Then
            'objAtt.SaveAsFile strSaveFldr & Format(Now, "yyyymmdd-HHMMSS") & Chr(32) & objAtt.FileName ' Add Date to The Name
            objAtt.SaveAsFile strSaveFldr & objAtt.FileName
            End If
        Next objAtt
    End If
    olItem.Delete
    strFilename = Dir$()
Wend
Cleanup:
Set msgFolder = Nothing
'Set saveFolder = Nothing
Set SH = Nothing
Set objAtt = Nothing
Set olItem = Nothing
End Function

Instrucciones de Uso

1.- Creamos el modulo en VBScript (Ver: Como utilizar el Editor VBA en Office Outlook).

Te recomendamos  Cómo quitar / solucionar la pantalla Active Desktop Recovery en Windows

2.- Configuramos la regla del cual normalmente recibimos los correos adjuntos en los correos (por asi llamarlo) para que se ejecute cuando lo recibamos (Ver:Crear y Configurar Reglas).

3.- Una vez que tengamos configurado lo anterior debemos crear la carpeta temporal que vemos en la linea 10 del código el cual es: Temp esta la crearemos en el C:Temp si deseamos cambiar la ruta también se debe realizar en el código en las lineas 10 y 23.

4.- Modificamos el tipo de archivo que deseamos guardar en el ejemplo solicitaron que fueran .pdf y .xml asi que en la linea 71 se especifico de la siguiente manera, lo pueden modificar a la extension de el archivo que deseen.

If ((InStr(objAtt.DisplayName, ".pdf") Or InStr(objAtt.DisplayName, ".xml"))) Then

Si deseamos que guarde todos los archivos adjuntos podemos eliminar las lineas 71 y 73 el cual sería la linea anterior y el End If.

5.- Ya configurado y creadas las carpetas requeridas al momento de recibir un correo con correos adjuntos por ejemplo:

Ejemplo-Guardar adjuntos de correos adjuntosEd

6.- El script se ejecutara, guardara los archivos en la ruta temporal y nos preguntara donde deseamos guardar los adjuntos de esos correos; extraerá y guardara los adjuntos en la carpeta indicada.Ruta - Guardar adjuntos de correos adjuntos7.- En la siguiente imagen se muestra que guardo los pdf contenidos, en los correos venian adjuntos archivos .xls, .doc y ninguno traia adjunto un xml.

Documentos - Guardar adjuntos de correos adjuntos

8.- Una vez guardados se eliminan los correos de la carpeta temporal.

9.- Listo, finaliza nuestro proceso, así con cada correo que recibamos con adjuntos y que cumpla con las condiciones que se especificaron al crear la regla.