Visualizzazione post con etichetta indirizzi destinatari. Mostra tutti i post
Visualizzazione post con etichetta indirizzi destinatari. Mostra tutti i post

venerdì 14 giugno 2019

MS Outlook: Visualizzare gli indirizzi dei destinatari nell'elenco messaggi della posta inviata

Nell'articolo Outlook: Visualizzare l'indirizzo email del mittente nel riquadro elenco messaggi  è stato mostrato come visualizzare l'indirizzo del mittente nell'elenco messaggi della posta in arrivo attraverso l'utilizzo di moduli personalizzati. Per visualizzare gli indirizzi dei destinatari nella cartella posta inviata non è possibile adottare lo stesso metodo ma bisogna procedere in modo diverso. In questo articolo illustrerò come raggiungere l'obiettivo tramite l'utilizzo di macro. 

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;
    Outlook, Scheda Sviluppo
    FIG 1 - Outlook, Scheda Sviluppo
  • Dalla scheda Sviluppo cliccare su Sicurezza macro;
    Outlook, 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.
    Outlook, Visualizza notifiche per tutte le 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;
    Outlook, Microsoft Visual Basic, Application Edition
    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;
    Outlook, Macro VBA IndirizziDestinatari
    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;
    Outlook, Esecuzione Macro
    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;
    Outlook, 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.
    Outlook, Campo Destinatari
    FIG 10 - Outlook, Campo Destinatari