venerdì 20 aprile 2018

VSTO la gestione della PEC tramite la creazione di un componente aggiuntivo di Outlook in VB.Net e C#

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/programmazione/art_vsto-creazione-componente-per-outlook-20_1565.aspx

Da alcune versione di Visual Studio è possibile creare componenti per il  programma di posta elettronica più famoso ed utilizzato al mondo, Microsoft Outlook, utilizzando il linguaggio di programmazione Visual Basci e C#.
Il componente è una dll che permetterà di effettuare alcune operazioni all’interno dell'applicativo Outlook.
In questo articolo, vedremo come creare una nuova barra con un nuovo pulsante, che al click del pulsante, visualizza le informazioni di una email di tipo PEC.
L’articolo fornisce anche interessanti aspetti sulla gestione degli utenti.
Si creazione un nuovo progetto di tipo “Componenti Aggiuntivi” situato nei modelli di Office. Tra i modelli presenti nel pannello centrale selezionare Componente aggiuntivo per Outlook 2013 (figura 1).


Figura 1 – La creazione del progetto

A questo punto confermate il tutto tramite il pulsante “OK”.
Il progetto non avrà interfaccia grafica.

Stesura del codice

Il progetto verrà aperto subito in codice per la stesura del codice, per generare un pulsante e barra in Outlook dobbiamo utilizzare le classi “CommandBar” e “CommandBarButton” qui di seguito tale dichiarazione a livello di classe.


VB.Net

Dim ComBar As Office.CommandBar

    Dim pulsante As Office.CommandBarButton

C#

Office.CommandBar ComBar;

        Office.CommandBarButton pulsante;



Si crea il gestore di evento per il pulsante, che andremo a creare, per la gestione della PEC.
Qui di seguito tali dichiarazioni.



VB.Net

Private Sub pulsante_Click(Ctrl As Office.CommandBarButton, ByRef CancelDefault As Boolean)

 

  End Sub

 

C#

private void pulsante_Click(Office.CommandBarButton Ctrl, ref bool CancelDefault)

        {

 

        }


Ora dobbiamo scrivere il codice per la creazione del pulsante e della barra.
Sono due metodi, uno crea la barra, e l’altro il pulsante, per il gestore evento click creato in precedenza.
Qui di seguito tali dichiarazioni.


VB.Net

Private Sub CreaBarra()

        ComBar = Globals.ThisAddIn.Application.ActiveExplorer().CommandBars.Add("PEC", Office.MsoBarPosition.msoBarTop, False, True)

        ComBar.Protection = Office.MsoBarProtection.msoBarNoCustomize

        ComBar.Visible = True

    End Sub

 

 

    Private Sub CreaPulsante()

        'aggiungo il pulsante alla barra ed imposto la proprietà testo oltre al gestore di evento click

        pulsante = TryCast(ComBar.Controls.Add(Office.MsoControlType.msoControlButton, Type.Missing, Type.Missing, Type.Missing, True), Office.CommandBarButton)

        pulsante.Caption = "Demo PEC VB"

        pulsante.Style = Office.MsoButtonStyle.msoButtonIconAndCaption

        pulsante.TooltipText = "Demo rileva dati PEC VB"

        pulsante.FaceId = 2605

        'gestore dell'evento click

        AddHandler pulsante.Click, AddressOf pulsante_Click

 

    End Sub

 

C#

  private void CreaBarra()

        {

            ComBar = Globals.ThisAddIn.Application.ActiveExplorer().CommandBars.Add(

                   "PEC",

                   Office.MsoBarPosition.msoBarTop,

                   false,

                   true);

            ComBar.Protection = Office.MsoBarProtection.msoBarNoCustomize;

            ComBar.Visible = true;

        }

 

 

        private void CreaPulsante()

        {

            //aggiungo il pulsante alla barra ed imposto la proprietà testo oltre al gestore di evento click

            pulsante = ComBar.Controls.Add(Office.MsoControlType.msoControlButton, Type.Missing, Type.Missing, Type.Missing, true) as Office.CommandBarButton;

            pulsante.Caption = "Gestione PEC";

            pulsante.Style = Office.MsoButtonStyle.msoButtonIconAndCaption;

            pulsante.TooltipText = "Gestione delle email di tipo PEC.";

            pulsante.FaceId = 2605;

            //gestore dell'evento click

            pulsante.Click += new Office._CommandBarButtonEvents_ClickEventHandler(pulsante_Click);

        }


Come si è visto nel precedente codice, la funzione “CreaBarra” inizializza l’oggetto di tipo CommandBar, impostando le varie proprietà.
Mentre la funzione “CreaPulsante” aggiunge alla barra precedentemente creata, un pulsante e gli assegna il gestore dell’evento click ed impostazioni varie al pulsante, come l’immagine tramite la proprietà “FaceId”, il testo, ed altro ancora.

Ora dobbiamo scrivere il codice che ci permetterà di estrapolare i dati dell’account e della nostra posta elettronica, per rilevare l’email di tipo PEC.
La funzione dovrà funzionare solo in ambito di email e non quando siamo nell’elenco dei contatti o nel calendario o nelle attività, ma solo nelle caselle di posta elettronica.
Utilizzeremo le classi per la gestione degli oggetti di Outloook, ed una classe che ci permette di gestire le informazioni dell’email selezionata, tramite appunto la classe “MailItem”.
In questa classe, abbiamo le proprietà per gestire le informazioni dell’email, quale appunto, il mittente, data ed ora di arrivo, l’oggetto, etc.

Inoltre tramite la classe “Account” possiamo gestire le informazioni relative all’utente della posta elettronica.
Qui di seguito il frammento di codice per l’evento click del pulsante, per estrapolare le informazioni dell’email PEC.




VB.Net

Private Sub pulsante_Click(Ctrl As Office.CommandBarButton, ByRef CancelDefault As Boolean)

 

        Try

            If Me.Application.ActiveExplorer().Selection.Count > 0 Then

                Dim objectSelezionato As [Object] = Me.Application.ActiveExplorer().Selection(1)

 

                If TypeOf objectSelezionato Is Outlook.MailItem Then

                    Dim mailElemento As Outlook.MailItem = TryCast(objectSelezionato, Outlook.MailItem)

                    Dim emailTipoPec As Integer = 0

                    For Each elemento As Outlook.Attachment In mailElemento.Attachments

                        If elemento.FileName.Contains(".eml") OrElse elemento.FileName.Contains("daticert.xml") Then

                            emailTipoPec += 1

                        End If

                    Next

                    If emailTipoPec = 2 Then

                        Dim Testo As String = "Destinatario: " + mailElemento.[To]

                        Testo += vbCr & " "

                        Testo += "Oggetto: " + mailElemento.Subject

                        Testo += vbCr & " "

                        Testo += "Nome: " + mailElemento.SenderName

                        Testo += vbCr & " "

                        Testo += "Destinatario CC: " + mailElemento.CC

                        Testo += vbCr & " "

                        Testo += "ID email CC: " + mailElemento.EntryID

                        Dim application As New Outlook.Application()

 

                        Dim accounts As Outlook.Accounts = application.Session.Accounts

                        For Each account As Outlook.Account In accounts

                            Testo += vbCr & " "

                            Testo += "Account Display: " + account.DisplayName

 

 

                            Testo += vbCr & " "

 

 

                            Testo += "Username Display: " + account.UserName

                        Next

                        System.Windows.Forms.MessageBox.Show(Convert.ToString("Testo: ") & Testo)

 

                    End If

                End If

            End If

        Catch ex As Exception

            System.Windows.Forms.MessageBox.Show("Errore: " + ex.Message)

        End Try

 

 

 

    End Sub

 

 

 

C#

private void pulsante_Click(Office.CommandBarButton Ctrl, ref bool CancelDefault)

        {

            try

            {

 

 

                if (this.Application.ActiveExplorer().Selection.Count > 0)

                {

                    Object objectSelezionato = this.Application.ActiveExplorer().Selection[1];

 

                    if (objectSelezionato is Outlook.MailItem)

                    {

                        Outlook.MailItem mailElemento = (objectSelezionato as Outlook.MailItem);

                        int emailTipoPec = 0;

                        foreach (Outlook.Attachment elemento in mailElemento.Attachments)

                        {

                            if (elemento.FileName.Contains(".eml") || elemento.FileName.Contains("daticert.xml"))

                            {

                                emailTipoPec += 1;

                            }

                        }

                        if (emailTipoPec == 2)

                        {

                            string Testo = "Destinatario: " + mailElemento.To;

                            Testo += "\r ";

                            Testo += "Oggetto: " + mailElemento.Subject;

                            Testo += "\r ";

                            Testo += "Nome: " + mailElemento.SenderName;

                            Testo += "\r ";

                            Testo += "Destinatario CC: " + mailElemento.CC;

                            Testo += "\r ";

                            Testo += "ID email CC: " + mailElemento.EntryID;

                            Outlook.Application application = new Outlook.Application();

 

                            Outlook.Accounts accounts = application.Session.Accounts;

                            foreach (Outlook.Account account in accounts)

                            {

                                Testo += "\r ";

                                Testo += "Account Display: " + account.DisplayName;

 

 

                                Testo += "\r ";

                                Testo += "Username Display: " + account.UserName;

 

 

                            }

                            System.Windows.Forms.MessageBox.Show("Testo: " + Testo);

                        }

 

                    }

                }

            }

            catch (Exception ex)

            {

                System.Windows.Forms.MessageBox.Show("Errore: " + ex.Message);

            }

        }





Applichiamo nell’evento ThisAddIn_Startup l’esecuzione della creazione del pulsante e barra, inizialmente scritto.
Qui di seguito il frammento di codice.




VB.Net

  Private Sub ThisAddIn_Startup() Handles Me.Startup

        CreaBarra()

        CreaPulsante()

    End Sub

C#

private void ThisAddIn_Startup(object sender, System.EventArgs e)

        {

            CreaBarra();

            CreaPulsante();

        }




A questo punto non ci resta che eseguire la nostra applicazione.
Tramite f5 o il pulsante esegui, avviamo il programma.
Potrebbe visualizzare un messaggio che dice “Non è possibile eseguire il debug o avviare l'esecuzione di questo progetto perché non è installata la versione richiesta di Microsoft Office.”
In questo caso, aprire il file di progetto (.csproject) con un qualsiasi programma di editor, ed impostare il parametro “DebugInfoExeName” con il valore della versione di office, per esempio se c’è scritto “#Software\Microsoft\Office\15.0\Outlook\InstallRoot\Path#outlook.exe” diventerà “#Software\Microsoft\Office\16.0\Outlook\InstallRoot\Path#outlook.exe” nel caso che abbiamo Microsoft Outlook 2016.
Nel caso che abbiamo una email pec, la selezioniamo e facciamo click sul pulsante in modo da visualizzare le informazioni.

Conclusioni

Le potenzialità offerte dalla creazione di componenti aggiuntivi per Microsoft Outlook, fornisce al programmatore notevoli potenzialità ed al tempo stesso opportunità non indifferenti.
Proprio con questi componenti che si possono estendere le funzionalità offerte dal programma di posta elettronica più usato al mondo, dando così possibilità di integrare i processi aziendali ed al tempo stesso anche ad attività lavorative con la gestione delle email.
Uno scenario che i programmatori devono valutare con attenzione, proprio per le tante opportunità che possono nascere ed al tempo stesso la flessibilità che offre tale architettura utilizzando la tecnologia .Net ed in particolare le “Windows Forms”.
Vorrei ringraziare l'amico Aldo, a cui dedico questo articolo di programmazione su Microsoft Office 2016
Tramite la parola Download è possibile scaricare il file utilizzato per l'articolo.

Nessun commento: