Quando ci si trova ad avere molti utenti che utilizzano la posta tramite Outlook (nota bene: Outlook, non Outlook express) connesso ad un exchange server, ogni tanto è d'obbligo fare un pò di pulizia ed archiviazione nelle caselle mail.
Sfortunatamente gli utentei usano in malo modo la posta.... ovverò viene quasi sempre vista come uno strumento di archiviazione e ricerca di allegati e documenti...ma la diemensione delle casella di posta non è infinita, sopratutto in ambito aziendale.
Spesso l'archiviazione risolve il problema, spesso invece si archiviano inutimente mail che occupano spazio solo perchè contengono allegati di notevole dimensione con un corpo della mail invece totalmente vuoto oppure senza comunicazioni che ci interessano. Quando però ci si trova davanti la proprioa casella con 300 (magari solo 300.... :P ) o più mail contenete allegati e con il pensiero di salvarne uno a uno....bhè... la voglia e l'entusiasmo di fare pulizia passa presto...

Di che per darmi una mano a fare questo odioso lavoretto mi sono assemblato leggendo quà e là una macro vbscript da eseguire all'interno di outlook che data una specifica cartella nel ramo principale della mailbox (nello specifico "estrai") mail per mail effettua al posto mio l'operazione di salvataggio degli allegati in una cartella di destinazione sul disco locale (nello specifico c:\temp)

Le operazioni da eseguire sono abbastanza facili e tutte lato client dell'utente:

  1. creare la cartella "estrai" nella milbox posta in arrivo
  2. creare se non presente la cartella sul filesistem C:\TEMP (se desiderache che sia in altra posizione/nome modificate lo script a vostro piacere)
  3. trasferire le mail da processare in questa cartella
  4. entrare nel menù "Strumenti -> Macro -> Visual basic Editor"
  5. inserire/creare un nuovo modulo vuoto di VBscript copiare incollare il codice sottostante
  6. eseguire il codice (icona tasto > "esegui macro")
  7. verrà richiesta la conferma per l'esecuzione di tale script con alcune raccomandazioni sulla presenza delle sopra citate cartelle, se l'operazione sarà andata a buon fine, in C:\TEMP vi ritroverete tutti gli allegati (in alcuni casi anche il corpo html e immagini delle mail)separati e con il loro nome originale!


A questo punto è possibile eliminare le mail nella cartella di posta estrai! (Non e stata volutamente prevista la cancellazione automatica delle mail da tale cartella, non si sa mai :P)

E' buona norma risincronizzare le caselle di posta con il server exchange, chiudere e riaprire Outlook. Se alla chiusura venisse richiesto il salvataggio della macro vbscript, sta a voi decidere se mantenerla memorizzata oppure copiare ed incollare il codice all'occorrenza.

Personalmente preferisco su caselle utenti NON mantenere questi script, che potrebbero essere lanciati a caso e fare danni....

Nel codice sottostante ho evidenziato in grassetto le due variabili che si possono cambiare per decidere la cartella nella mail box sorgente e la cartella destinaizone sul pc.

La macro è stata provata su versioni di Outlook 2000 e 2003, se qualcuno avrà occasione di eseguirla su verisoni più recenti  (es. 2007) è pregato di lascirmi un post ed eventualmente migliorare il codice se fosse necessario.


# Code

'Macro office - provata su outlook2000, outlook2003
'Salva tutti gli allegati, anche nel corpo della mail inseriti nella mailbox-cartella indicata "estrai"
Sub SaveAtt_all()
Const olFolderInbox = 6
    Dim olkApp As Object, _
        olkInbox As Object, _
        olkItem As Object, _
        olkAttach As Object

    Dim control As Integer
    Dim pathmsg As String

control = MsgBox("Hai creato la mailbox 'estrai' e hai copiato/trasferito le mail da processare? Gli allegati verranno salvati se possibile in c:\temp. Continuare?", _
          vbYesNo + vbQuestion, _
          "Quit")
If control = vbYes Then
       
    Set olkApp = CreateObject("Outlook.Application")
    Set olkInbox = olkApp.Session.GetDefaultFolder(olFolderInbox).Folders("estrai")
 
    For Each olkItem In olkInbox.Items
        If olkItem.Attachments.Count > 0 Then
            For Each olkAttach In olkItem.Attachments
            olkAttach.SaveAsFile "C:\temp\" & olkAttach.FileName
        Next
        End If
    Next
End If
End Sub


# End code

Commenti  

0 #11 Gifa 2017-01-28 19:28
Ciao William,
utilizzo Outlook 2013.
Il codice funzione, Mi scarica gli allegati nella cartella che voglio.
Ho solo un problema:-
Ricevo più volte lo stesso allegato (di nome) ma che dentro contiene informazioni diverse.
Quando il codice trova un'altro allegato con con lo stesso nome, lo sostituisce al precedente.
io arei bisogno che mi scarichi anche il secondo allegato aggiungendo senza chiedermi nulla (1) (2) (3)..
al nome, così potrò controllare cosa è stato modificato.
Come si potrebbe fare?
Grazie
0 #10 Emanuele 2015-12-22 14:41
Citazione Daniele:
Perfetto! Funziona alla grande anche su Outlook 2007
Grazie


Lo sto provando su Outlook 2007 ma mi restituisce l'errore:
Impossibile salvare l'allegato.Auto rizzazione non idonea per eseguire l'operazione.

Come l'hai risolta?
0 #9 Giuseppe 2015-07-30 08:44
Grazie per aver condiviso questa macro, l'ho provata su Outlook 2010 e funziona.
+1 #8 marco 2013-10-18 10:49
ciao, bella ed utile macro ma..... è possibile perfezionarla ulterirmente?
E' possibile fare in modo che la macro salvi gli allegati in singole cartelle su Pc? Praticamente manualmente andremmo ad aprire ogni singola email, salvare i relativi allegati in una cartella del pc e passare alla successiva salvado gli allegati in una cartella su pc diversa dalla precedente. E' possibile fare questo con una macro? Come? Grazieeee
0 #7 andrew 2012-07-27 01:22
salve
grazie mille william

il mio problema e' pero capire come ottenere un filtro in outlook che scelga le mail in arrivo con una particolare stringa nel nome dell'allegato

su outlook (2010) ci sono molte combinazioni di regole ma non ne ho trovata una simile

grazie ancora e saluto

andrew
0 #6 William - OpenSupport.it 2012-07-26 15:27
Nessuno che lo ha testato su Outlook 2010?? Attendo vostri test!! :lol:
0 #5 William - OpenSupport.it 2012-07-26 15:23
Io direi che la soluzione più spiccia sia quella di:
1) creare le opportune cartelle in outlook che contengano le mail in arrivo
2) creare un filtro su outlook che posizioni le mail nelle cartelle desiderate in base alla stringa ricercata
3) creare i due VBscript in outlook e lanciarli all'occorrenza, ovviamente ogni script deve avere i corretti puntamenti alle cartelle sia in outlook sia su disco del PC
0 #4 andrew 2012-07-25 14:57
Salve,
visto che siete cosi bravi sapete dirmi come creare un codice (e se e' possibile) che esegua questa operazione:

- se arriva una mail con un allegato il cui nome contiene la stringa xxx
- allora archivia il file nella cartella C:/yyy
- e archivia la mail nella cartella di outlook zzz

In ogni caseo grazie mille e saluto.

Andrew
0 #3 Daniele 2012-04-12 11:21
Perfetto! Funziona alla grande anche su Outlook 2007
Grazie
0 #2 William - OpenSupport.it 2011-07-29 09:51
:D bene!, sicuramente è possibile, ma così su due piedi non saprei quali chiamate fare in VbScript per eseguire il filtro e successivamente l'estrazione.

Direi che la soluzione più "agile" potrebbe essere quella di lanciare una ricerca da outlook, spostare i messaggi trovati in una cartella specifica e lanciare la macro solo su quella, messo e concesso che tu possa muovere i messaggi dalla loro posizione di origine (perchè magari poi devi cancellarli o altro)

You have no rights to post comments

Loading feeds...

Logo Design Company