Sono partito da un’esigenza segnalata da uno degli utenti in ufficio, il quale aveva bisogno di scaricare un grande numero di documenti PDF in un solo colpo, “catturandoli” da più mail già ricevute e messe da parte nel suo Outlook (una mail, un allegato PDF, questa la proporzione). Outlook non prevede questa necessità, e permette esclusivamente di scaricare tutti gli allegati –di una singola mail– in un solo colpo. Aggirare l’ostacolo però è possibile, lo si fa tramite una porzione di codice VBA da andare a inserire nella finestra del Microsoft Visual Basic, richiamabile da ogni singolo programma di Office.
Inizialmente pensato come un comportamento da adottare in seguito alla ricezione di una nuova mail (con una regola ad-hoc, per ingaggiare uno script), si è trasformato in un pulsante da andare a inserire nella barra multifunzione di Outlook, un “tool” da tenere a portata di mano in caso di necessità, che a oggi permettono di individuare e scaricare file PDF, ma che con una piccola modifica potrebbe intercettare qualsiasi altra cosa.
Il funzionamento, spiegato in maniera semplice, è questo:
- si seleziona una o più mail tra quelle del proprio Outlook,
- si fa clic su un pulsante messo appositamente nella barra multifunzione del client di posta elettronica,
- si attende che lo script verifichi l’esistenza di file PDF negli allegati delle mail selezionate, quindi li estragga e li vada a inserire in una apposita cartella sul Desktop (che verrà utilizzata se già esistente, creata se invece non presente). Il tutto dura qualche secondo (minuto, se le mail da analizzare sono davvero tante).
Tradotto in passaggi da riprodurre sul proprio Outlook, la cosa cambia, ed è chiaramente più tecnica. Te la faccio il più semplice possibile.
Procedure in comune: notifica per le macro non firmate
Prima di partire, dovrai andare a modificare il comportamento del Centro di sicurezza del tuo Outlook affinché ti faccia comparire degli avvisi a video nel caso in cui venga tentata l’esecuzione di una Macro non firmata. Questo permetterà allo script aggiunto (ne parliamo dopo) di funzionare correttamente, in quanto “home made” (fatto in casa, dai).
Per farlo, dovrai andare in File → Opzioni → Centro protezione → Impostazioni Centro protezione → Impostazioni macro e selezionare la voce “Visualizza notifiche per tutte le macro”:
Un clic su OK per confermare la modifica e chiudere la finestra, sei a posto.
Procedure in comune: VBA
Per entrambi i tipi di comportamento che puoi scatenare in Outlook (salvataggio dei PDF tramite pulsante nella barra multifunzione, oppure tramite regola che lancia lo script), dovrai sempre andare ad aprire la finestra di Microsoft Visual Basic che richiami tramite la combinazione di tasti ALT
+ F11
.
Per facilitarti le cose, ho già impacchettato ciò che ti serve per ottenere il risultato desiderato. Ho scritto due file BAS (codici importabili in VBA) che ho pubblicato su Gist. Il primo è quello relativo al salvataggio scatenato da una regola, il secondo per quello tramite pulsante (quindi manualmente). Scarica ciò che ti serve (fai clic in alto a destra sul pulsante Download ZIP, quindi estrai il contenuto e recupera il file con estensione bas
):
- SavePDF_Rule per la regola
- SavePDF_Button per la macro / pulsante
Torna nella finestra di Microsoft Visual Basic, fai clic con il tasto destro su Progetto1 e seleziona Importa file, seleziona quindi il file che il file relativo al codice che ti interessa utilizzare per terminare l’importazione, poi fai clic su Salva (nella barra superiore degli strumenti, altrimenti c’è la combinazione da tastiera CTRL
+ S
).
Nel caso in cui tu volessi entrambi le funzioni (quindi tutto il codice sorgente) fai riferimento a questo ulteriore collegamento a Gist.
Salvare PDF con una regola
Prima di procedere, apri un prompt dei comandi, copia e incolla questa stringa:
REG ADD "HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security" /v EnableUnsafeClientMailRules /t REG_DWORD /d 1 /f
Ciò permetterà di sbloccare la possibilità di utilizzare / richiamare uno script all’interno di una regola di Outlook, opzione disabilitata di default da Microsoft (già da qualche tempo).
Fatto ciò, se hai già caricato il mio script tra i moduli VBA, dovrai solo creare una nuova regola e –nella seconda schermata di avanzamento– chiedergli di eseguire uno script, troverai quello precedentemente caricato tra i disponibili (forse sarà l’unico), utilizzalo e vai avanti con la sua costruzione:
Troverai (nel caso in cui la regola entri in funzione) i file PDF all’interno della cartella Attachments
sul tuo Desktop.
Ringrazio Antonio che mi ha segnalato nei commenti un problema con lo specifico codice della regola che ho provveduto a correggere con colpevole ritardo. Ho quindi rilasciato la versione 0.3 di SavePDF_Rule.bas
ora disponibile su Gist, caricato anche nello spazio Box di cui parlo in chiusura articolo. Ho fatto lo stesso per il modulo BAS completo (SavePDF_Module.bas
). Il problema non riguarda certamente quello del singolo SavePDF_Button.bas
. La mia svista causava un errore di runtime a ogni arrivo di un’email contenente un allegato PDF.
Salvare PDF con un pulsante
Dando per scontato che tu abbia già importato il codice VBA (come già descritto un paio di paragrafi fa),fai clic con il tasto destro sulla barra multifunzione di Outlook e seleziona la voce Personalizza barra multifunzione. Fai clic sul pulsante “Nuovo gruppo” (in basso a destra nel popup comparso), posizionalo dove lo preferisci spostandolo con le frecce su / giù disponibili lateralmente nella finestra a video, quindi rinominalo (suggerisco “Tools“).
Seleziona ora la voce “Macro” nella colonna sinistra “Scegli comandi da:” e aggiungi Progetto1.ExportAttachments, quindi rinominalo in (per esempio) “Estrai PDF”:
Un clic su OK per salvare e chiudere la finestra, il risultato dovrebbe assomigliare a questo:
Puoi verificare il funzionamento della modifica selezionando manualmente delle mail e facendo clic sul pulsante. Troverai (se ne esistono, e quindi se vengono estratti) i file PDF all’interno della cartella Attachments
sul tuo Desktop.
In conclusione
Attento: ricordati che, allo stato attuale delle cose, due allegati con lo stesso nome non possono coesistere nella stessa cartella Attachments (andrebbe modificato lo script), l’ultimo estratto sovrascrive sempre quello estratto precedentemente.
Lo script è capace – dalla versione 0.2 – di salvare file PDF con lo stesso nome perché antepone data e ora della ricezione dell’email che contiene l’allegato salvato.
Salvo errori nel processo di “installazione” (se così posso chiamarlo), tutto dovrebbe funzionarti alla perfezione, permettendoti di catturare i file PDF che vengono allegati alle mail che ricevi e portarli nella cartella Attachments
sul tuo Desktop. Nessuno però ti impedisce di modificare lo script e fargli verificare l’esistenza di altre estensioni, come doc
, docx
, xlsx
e chi più ne ha più ne metta. Trovi diversi riferimenti in merito nel sito web che più mi ha aiutato a plasmare il risultato di cui avevo necessità (slipstick.com/developer/save-attachments-to-the-hard-drive).
Tutto il set di script e modifiche da operare vengono rilasciate –come sempre– “as is“, con nessuna garanzia o responsabilità. Tutto è stato provato decine di volte, installato su più PC, fatto funzionare senza battere ciglio, ma sappiamo tutti benissimo che ogni configurazione differisce dall’altra per delle “virgole“. Quella certamente testata si è basata su Outlook 2016 x64 (1708 build 8431.2079). Ne ho caricato una copia completa sul mio spazio box, nel caso in cui ti serva scaricare tutto in un colpo: go.gioxx.org/outlooksavepdf.
L’area commenti, come al solito, resta a disposizione per eventuali suggerimenti e domande inerenti questo articolo.
Buon lavoro!
L'articolo potrebbe non essere aggiornato
Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)

Se hai correzioni o suggerimenti puoi lasciare un commento nell'apposita area qui di seguito o contattarmi privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! Satispay / PayPal / Buy Me A Coffee / Patreon
Ciao Gioxx, ottimo lavoro questo del salvataggio automatico di più “PDF”. Secondo te è possibile con qualche piccola modifica impostare anche la stampa automatica (sulla stampante predefinita del PC che sta eseguendo lo script, per forza) del documento PDF allegato ad una mail?
Ovvero: creare una regola in Outlook che, alla ricezione di una particolare mail (riconoscibile dall’oggetto) stampi il corpo della mail (già previsto dalle regole standard di Outlook) e faccia partire lo script che stampi l’allegato PDF della mail?
Ciao e grazie. Roberto
Ciao Rob. Conosco bene l’esigenza perché inizialmente l’abbiamo avuta anche qui, ma ci ha dato da subito rogne e malfunzionamenti che ci facevano perdere più tempo rispetto al valore stesso della soluzione. Potrei consigliarti una combo. Lo script per scaricare i PDF in un solo colpo, un piccolo programma per mandarli in stampa facilmente, vedi: https://gioxx.org/2017/06/26/stampare-automaticamente-da-una-cartella-di-windows-con-folder-agent/
Ah ok grazie del consiglio.
Folder agent non è più disponibile… vedo se trovo qualcosa di simile. ;-)
Qui le possibili alternative: https://alternativeto.net/software/folder-agent/
Ho trovato questo in rete:
http://punto-informatico.it/s_3254833/Download/News/autoprint.aspx
Ne sai qualcosa?
Non conosco, ma immagino sia una semplice alternativa al programma da me suggerito (speravo di avere una copia dell’installer da caricarti online, ma credo di averla buttata via poco tempo fa).
[…] Outlook 2016: scaricare insieme gli allegati da diverse mail (PDF) […]
Ciao,
io e le mie colleghe non sappiamo come poterti ringraziare. Eravamo veramente in difficoltà per il problema di scarico e stampa di allegati PDF. Per esigenze lavorative ne riceviamo molte e la perdita di tempo era veramente insostenibile. Grazie alle tue istruzioni (molto chiare e dettagliate) che siamo riuscite a seguire pur non avendo molta dimestichezza con l’informatica abbiamo risolto il nostro problema. Grazie di cuore. Silvana
Ciao Giovanni,
intanto vorrei ringraziarti, davvero utile e ben fatto il tuo articolo!
Sto affrontando un problema simile in cui gli allegati non sono .pdf bensì .esi, ho quindi modificato la macro come logico sostituendo “pdf” con “edi” e la regola gira.
Il mio problema però è che le mail con allegati esi, oltre ad essere parecchie (circa 4000 per ora), arrivano tramite server sul client Thunderbird e vengono importate in outlook in un formato che non gli consente la visualizzazione dell’allegato.
Ciao Giovanni,
intanto vorrei ringraziarti, davvero utile e ben fatto il tuo articolo!
Sto affrontando un problema simile in cui gli allegati non sono .pdf bensì .esi, ho quindi modificato la macro come logico sostituendo “pdf” con “edi” e la regola gira.
Il mio problema però è che le mail con allegati esi, oltre ad essere parecchie (circa 4000 per ora), arrivano tramite server sul client Thunderbird e vengono importate in outlook in un formato che non gli consente la visualizzazione dell’allegato.
Ti allego una foto a completare
Ciao Stefano, ti ringrazio per i complimenti, fanno sempre piacere.
Il tuo problema chiaramente è ben differente e nulla può lo script se il metodo di passaggio di quelle email è differente rispetto alla più classica delle ricezioni da server di posta a Outlook.
Bisognerebbe provare a modificare quel flusso e permettere a Outlook di fare il suo lavoro in collaborazione con lo script, diversamente c’è bisogno di inventarsi qualcosa per Thunderbird, in questo caso però c’è bisogno di una manina da chi sviluppa componenti aggiuntivi, io lo faccio a livello molto amatoriale e non sarei capace di replicare lo script Outlook!
Buongiorno, trovo molto utile il tuo lavoro e spero tu mi possa dare una mano: su Outlook gestisco diverse caselle pec per cui vorrei impostare la regola di salvataggio degli allegati “.xml”. Il che non sarebbe un problema, se non fosse che in Outlook le mail PEC si presentano come mail con in allegato un file “.eml” che contiene gli allegati “.xml” che vorrei salvare. Sarebbe possibile quindi impostare lo script per salvare, di fatto, l’allegato dell’allegato?
Ciao l3tsgo, messa così la risposta dovrebbe essere “no” perché il mio script può tranquillamente essere riadattato per scaricare l’allegato in EML, non può però sbirciare ulteriormente al suo interno e quindi ti lascerebbe un po’ appiedato per il tuo scopo.
Quello che però mi viene in mente è che tu potresti davvero salvare i file EML con il mio script in Outlook e poi usare un secondo script (esterno a Outlook) per estrarre da tutti gli EML il loro allegato.
Cosa ne pensi? Puoi fare qualche test in autonomia (ricorda sempre di fare un backup prima) modificando il mio script e dicendogli di scaricare l’estensione EML al posto di PDF, successivamente dovrai lavorare con un VBScript che estrae gli allegati dai file EML, dai un’occhiata qui: https://stackoverflow.com/a/19255575
Proverò a smanettarci un po’. Grazie per i suggerimenti!
Ottimo! Fammi poi sapere se riesci nell’intento! :-)
Grazie, spiegato molto bene e funziona benissimo.
Ottimo, grazie a te per il commento e la conferma :-)