La prima macro che verrà mostrata consente di aggiungere una nuova colonna all'interno della cartella posta inviata: Destinatari. Affinché la nuova colonna venga compilata con gli indirizzi dei destinatari è necessario selezionare le email di proprio interesse ed eseguire la macro. Vediamo passo passo come procedere:
- In Outlook, dal menu File -> Opzioni selezionare Personalizzazione barra multifunzione;
- Nell'elenco Schede principali (sulla destra) aggiungere il segno di spunta alla voce Sviluppo e cliccare su OK;
FIG 1 - Outlook, Scheda Sviluppo - Dalla scheda Sviluppo cliccare su Sicurezza macro;
FIG 2 - Outlook, Sicurezza macro - Dalla finestra Centro protezione, nella sezione Impostazioni macro, selezionare Visualizza notifiche per tutte le macro. In questo modo all'avvio di Outlook verrà richiesto se eseguire la macro.
FIG 3 - Outlook, Visualizza notifiche per tutte le macro - Avviare Microsoft Visual Basic, Application Edition tramite la combinazione di tasti ALT+F11;
- Nella visualizzazione ad albero del progetto, sul lato sinistro della finestra, cliccare 2 volte su ThisOutlookSession;
FIG 4 - Outlook, Microsoft Visual Basic, Application Edition - Copiare e incollare il seguente script;
Public Sub IndirizziDestinatari() Dim currentExplorer As Explorer Dim Selezione As Selection Dim obj, objMail As Object Dim objProp As Outlook.UserProperty Dim strDomain Dim Recipients As Outlook.Recipients Dim recip As String 'Casella di posta Dim i Set currentExplorer = Application.ActiveExplorer Set Selezione = currentExplorer.Selection On Error Resume Next For Each obj In Selezione Set objMail = obj strDomain = "" Set Recipients = objMail.Recipients For i = Recipients.count To 1 Step -1 recip$ = Recipients.item(i).Address ' Per elaborare gli indirizzi x.500 If InStr(1, LCase(recip), "/ou=") Then recip = Right(recip, Len(recip) - InStr(1, LCase(recip), "recipients") - 13) ' Aggiunge ; se sono presenti più indirizzi If i = 1 Then strDomain = strDomain & recip Else strDomain = strDomain & recip & "; " End If Next i Debug.Print strDomain Set objProp = objMail.UserProperties.Add("Destinatari", olText, True) objProp.Value = strDomain objMail.Save Err.Clear Next Set currentExplorer = Nothing Set obj = Nothing Set Selezione = Nothing End Sub
- Salvare cliccando sull'apposita icona quindi ritornare alla finestra principale di Outlook;
FIG 5 - Outlook, Macro VBA IndirizziDestinatari - Selezionare la cartella Posta inviata e selezionare un'email, o un gruppo di email, per le quali si intende visualizzare l'indirizzo email dei destinatari;
- Selezionare la scheda Sviluppo, cliccare su Macro quindi selezionare la macro creata;
FIG 6 - Outlook, Esecuzione Macro - Dalla scheda Visualizza, selezionare Cambia visualizzazione e impostare l'opzione Singola;
FIG 7 - Outlook, Visualizzazione Singola - Sempre dalla scheda Visualizza, selezionare Impostazioni visualizzazione quindi cliccare sul pulsante Colonne;
FIG 8 - Outlook, Colonne - Nella casella Seleziona colonne disponibili da selezionare Campi definiti dall'utente nella cartella;
- Nella casella Colonne disponibili verrà elencata la colonna Destinatari creata dalla nostra macro, selezionarla e cliccare sul pulsante Aggiungi per aggiungere la nuova colonna alla visualizzazione. É possibile spostare la colonna nella posizione desiderata tramite i pulsanti Sposta su e Sposta giù quindi confermare la modifica cliccando su OK e poi ancora su OK per tornare ad Outlook.
FIG 9 - Outlook, Aggiungere la colonna Destinatari
In un'infrastruttura MS Exchange Server gli indirizzi possono essere visualizzati come indirizzi x.500 e non come indirizzo SMTP. Un indirizzo x.500 è una stringa simile alla seguente
/o=azienda /ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=<user name o email>
All'interno della macro gli indirizzi x.500 vengono gestiti con la seguente riga di codice
If InStr(1, LCase(recip), "/ou=") Then recip = Right(recip, Len(recip) - InStr(1, LCase(recip), "recipients") - 13)
che preleva l'ultima parte dell'indirizzo x.500 (quella successiva alla stringa Recipients) dove è contenuto l'user name o l'indirizzo di posta.
La procedura sopra esposta funziona per i messaggi già inviati. Per fare in modo che il campo venga valorizzato automaticamente ad ogni invio di un'email:
- Da Outlook, avviare Microsoft Visual Basic, Application Edition tramite la combinazione di tasti ALT+F11;
- Nella visualizzazione ad albero del progetto, sul lato sinistro della finestra, selezionare ThisOutlookSession;
- Posizionarsi nella prima riga della pagina quindi copiare ed incollare il seguente codice VBA
Dim WithEvents olSent As Items Private Sub Application_Startup() Dim NS As Outlook.NameSpace Set NS = Application.GetNamespace("MAPI") Set olSent = NS.GetDefaultFolder(olFolderSentMail).Items Set NS = Nothing End Sub Private Sub olSent_ItemAdd(ByVal Item As Object) Dim objProp As Outlook.UserProperty Dim strDomain As String Dim Recipients As Outlook.Recipients Dim recip As String 'Casella di posta Dim i strDomain = "" Set Recipients = Item.Recipients For i = Recipients.count To 1 Step -1 recip$ = Recipients.Item(i).Address ' Per elaborare gli indirizzi x.500 If InStr(1, LCase(recip), "/ou=") Then recip = Right(recip, Len(recip) - InStr(1, LCase(recip), "recipients") - 13) ' Aggiunge ; se sono presenti più indirizzi If i = 1 Then strDomain = strDomain & recip Else strDomain = strDomain & recip & "; " End If Next i Set objProp = Item.UserProperties.Add("Destinatari", olText, True) objProp.Value = strDomain Item.Save Err.Clear Set objProp = Nothing Set Recipients = Nothing End Sub
- Riavviare Outlook e provare ad inviare un nuovo messaggio.
FIG 10 - Outlook, Campo Destinatari