VSTO creazione componente per Outlook 2016 per gestire la PEC .Net

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.