sabato 30 giugno 2018

Software gratuito di recupero dati EaseUS Data Recovery Wizard Free



Un software gratuito che permette di recuperare dati su sistemi operativi Windows, è possibile tramite EaseUS Data Recovery Wizard, scaricabile qui https://it.easeus.com/data-recovery-software/data-recovery-wizard-free.html
La versione  gratuita non ha limitazioni di tempo ma di alcune funzionalità a differenza di quelle a pagamento.
Un software che permette di recuperare i file cancellati nel pc.

venerdì 29 giugno 2018

postgresql alter table two primary key

Se stiamo utilizzando il database PostgreSql e vogliamo creare due chiavi primarie in una tabella, nel quale è già presente una, lo script qui di seguito, illustra tale tecnica.

//elimino la chiave

alter table Nome_Tabella drop constraint NomeConstraint_pkey;

commit

alter table Nome_Tabella add constraint NomeConstraint_pkey primary key (NomeColonna1,  NomeColonna2);


giovedì 28 giugno 2018

Creazione di sito web Asp.Net con MVC e Entity Framework VB.Net e C#

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/programmazione/art_creazione-di-sito-web-aspnet-con-mvc-e-e_1575.aspx


In questo articolo vedremo come creare un semplice sito nel quale effettuare le operazioni più comuni su una tabella di database (inserimento, aggiornamento, cancellazione e visualizzazione) tramite la tecnologia Asp.Net in ambito MVC e la gestione della base tramite Entity Framework.
Il linguaggio di programmazione utilizzato sarà Visual Basic Net e C#.

Creazione tabella e sito
Si crea una tabella nel quale andremo a gestire i dati. Tramite Sql Server, si crea un database oppure utilizzare uno già esistente e creare una tabella denominata “Anagrafica”.
In questa si creano tre colonne, una denominata ID di tipo int e chiave, con contatore automatico, una colonna denominata “Nome” di tipo Varchar 50 ed infine un’ultima colonna chiamata “cognome” sempre di tipo Varchar lunghezza 50.
Il tutto come in figura 1.


Figura 1 – la creazione della tabella

A questo punto si apre Visual Studio .Net, e dopo aver selezionato il linguaggio di proprio interesse, selezioniamo la categoria “Web” e poi tra i modelli “Applicazione WEB Asp.Net” il tutto come mostrato in figura 2.

Figura 2 – La creazione del progetto

A questo punto facciamo click sul pulsante “OK” e nella finestra che viene aperta (figura 3) selezioniamo il modello “Empty” e poi mettiamo la spunta “MVC”.


Figura 3 – La scelta del modello

Aggiungiamo nel progetto il riferimento a Entity Framework creando una connessione al nostro database.
Possiamo aggiungere al progetto tramite Nuget Entity Framework nel caso che non lo abbiamo installato.
Tramite la finestra “Esplora soluzioni” facciamo click con il tasto destro sul progetto e dal menu selezioniamo “Nuovo” e poi nel sottomenu “Nuovo Elemento” nella finestra che viene aperta (figura 4) selezioniamo sulla sinistra la voce “Dati” e tra i modelli presenti selezioniamo “Ado.Net Entity Data Model”.

Figura 4 – La scelta del modello.

Assegniamo al progetto il nome “EntityModel” e confermiamo il tutto tramite il pulsante “Aggiungi”.
Nella successiva finestra (Figura 5) selezioniamo come modello da applicare quello relativo a “Entity Framework designer da database” in modo viene creato prendendo spunto dalla tabella creata in precedenza.


Figura 5 – la creazione del modello EF.

A questo punto facciamo click sul pulsante “Avanti” e nella finestra che viene aperta (figura 6) impostiamo il nome della connessione (per esempio DatiEntities) e la spunta sulla voce “si includi i dati sensibili nella stringa di connessione”


Figura 6 – la gestione della connessione al database

Facciamo click sul pulsante “Avanti” e nella finestra successiva, selezioniamo la tabella di nostro interesse, essendoci solo “Anagrafica” mettiamo la spunta sulla tabella e mettiamo il come dati “DatiModel” e la spunta “Rendi plurali o singolari nomi degli oggetti generati” come mostrato in figura 7.


Figura 7 – La seleziona della tabella

A questo punto confermiamo tramite il pulsante “Fine”.

Stesura del codice

Nella finestra “Esplora soluzione” facciamo click sulla cartella “Controllers” nel menu che viene aperta selezioniamo “Aggiungi” e poi nel sottomenu “Controller” nella finestra che viene aperta (figura 8) selezioniamo il modello di tipo “Controller MVC 5 con visualizzazioni, che utilizza Entity Framework “

Figura 8 – La creazione del controller

Facciamo click sul pulsante “Aggiungi” e verrà aperta una finestra nel quale dovremmo impostare il nome del controller, la tabella di riferimento ed il contesto.
Come si vede in figura 9, nel campo “Classe Modello” dobbiamo selezionare quello presente (Anagrafica) che riguarda appunto la nostra tabella.
Per il campo “Classe Contesto dati” selezioniamo tramite il pulsante “+” il contesto che verrà creato.
Lasciamo la spunta su “Genera visualizzazioni” e nel campo “Nome Controller” impostiamo il valore a “AnagraficasController”.


Figura 9 – la creazione del nuovo controller

A questo punto facciamo click sul pulsante “Aggiungi”.
Qualche secondo di attesa, e verranno generate nella cartella “Views” le varie pagine per la gestione dei dati presenti nella sottocartella denominata “Anagraficas” come mostrato in figura 10.


Figura 10 – Le pagine create.

Ora non ci resta che fare una piccola modifica per vedere in esecuzione il nostro primo sito in Asp.Net in ambito MVC Con Entity Framework per la gestione dei dati.
Nella cartella “App_Start” modifica il valore del parametro “Controller” da “Home” in “Anagraficas”
Qui di seguito come viene proposto il codice con la relativa modifica per entrambi i linguaggi.


VB.Net

 

Public Sub RegisterRoutes(ByVal routes As RouteCollection)

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

 

        routes.MapRoute(

            name:="Default",

            url:="{controller}/{action}/{id}",

            defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}

        )

    End Sub

 

C#

public static void RegisterRoutes(RouteCollection routes)

        {

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

 

            routes.MapRoute(

                name: "Default",

                url: "{controller}/{action}/{id}",

                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

            );

        }



Mentre qui di seguito la modifica che dobbiamo apportare.



VB.Net

Public Sub RegisterRoutes(ByVal routes As RouteCollection)

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

 

        routes.MapRoute(

            name:="Default",

            url:="{controller}/{action}/{id}",

            defaults:=New With {.controller = "Anagraficas", .action = "Index", .id = UrlParameter.Optional}

        )

    End Sub

C#

  public static void RegisterRoutes(RouteCollection routes)

        {

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

 

            routes.MapRoute(

                name: "Default",

                url: "{controller}/{action}/{id}",

                defaults: new { controller = "Anagraficas", action = "Index", id = UrlParameter.Optional }

            );

        }


Ora dobbiamo eseguire il nostro sito per vedere le funzionalità di inserimento, modifica, cancellazione e visualizzazione dati.
Qui di seguito il sito che verrà eseguito.


Figura 11 – La visualizzazione del sito

Conclusioni

In questo articolo abbiamo visto come creare passo dopo passo la creazione di un sito Asp.Net di tipo MVC con Entity Framework per gestire le basi dati. La facilità di creare applicazioni per la gestione dati, con questa tecnica permette al programmatore di realizzare applicazioni in maniera rapida e con le funzionalità più comuni. Le potenzialità offerte dall’ambiente di sviluppo Visual Studio fornisce al programmatore uno strumento molto valido che snella la stesura di codice e soprattutto semplifica applicazioni gestionali.

mercoledì 27 giugno 2018

Generatore qrcode online

Se state cercando un generatore di QrCode, che fornisce gratuitamente la realizzazione di immagini senza chiedere moduli registrazioni o email, il seguente sito https://qrcodemakr.com/ offre notevoli funzionalità in tale ambito.
Tramite le varie pagine, è possibile generare Qrcode da testo, numero di telefono, siti internet ed altro ancora.

Il sito è in lingua inglese.

martedì 26 giugno 2018

Sito sulle tecnologie

Oggi segnalo un sito in lingua italiana nel quale sono riportate notizie e trucchi sul mondo della tecnologia.
Il seguente sito http://www.maffezzoli.eu/ contiene una serie di articoli che forniscono guide e notizie sull'utilizzo di software e non solo.

lunedì 25 giugno 2018

VSTO .Net trasformare una email di tipo msg in EML per le pec in VB

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/programmazione/art_net-vsto-trasformare-una-email-di-tipo-m_1574.aspx


In questo articolo vedremo come convertire una email nel formato Outlook 2016 che ha l’estensione “.msg” nel formato universale per altri client email di tipo “.eml”.
Inoltre si sperimenterà la conversione su una email di tipo “PEC” con all’interno del messaggio un allegato, fornendo così al lettore interessanti spunti per realizzare programmi o gestire i propri progetti .Net nel modo migliore.
Il tutto verrà illustrato con i linguaggi di programmazione più usati per la tecnologia .Net in particolare con il linguaggio VB.Net e C#

Stesura del codice

Si crea un nuovo progetto di tipo VSTO con Visual Studio 2017 community o altre versione.
Nella creazione del progetto, selezionare il linguaggio di proprio interesse, nelle varie sotto voci, fare click sulla voce “Office/Sharepoint” e nel sotto menu selezionare “Componenti Aggiuntivi” a questo punto, nella parte dei modelli (parte centrale) selezionare il modello di tipo “Componente aggiuntivo per Outlook 201x” dove la X sta indicando la versione (2016 o 2013).
Facciamo click sulla classe (o file) denominato “ThisAddin” presente per i due linguaggi.
In alto, sopra ogni dichiarazione, scriviamo lo spazio dei nomi per gestire alcuni aspetti del codice per fare uso delle classi per realizzare il nostro esempio.
Qui di seguito si riporta la dichiarazione dei spazio dei nomi per entrambi i linguaggi.


VB.Net

Imports System.Net.Mail

Imports System.IO

 

C#

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Xml.Linq;

using Outlook = Microsoft.Office.Interop.Outlook;

using Office = Microsoft.Office.Core;

 

 

using System.Windows.Forms;

using System.IO;

using System.Net.Mail;


A questo punto dobbiamo creare a livello di classe, due oggetti per la creazione della barra e del pulsante che al click verrà eseguito la conversione del file
Qui di seguito le dichiarazioni per entrambi i linguaggi.



VB.Net

Dim ComBar As Office.CommandBar

    Dim pulsante As Office.CommandBarButton

C#

  Microsoft.Office.Core.CommandBar ComBar;

        Microsoft.Office.Core.CommandBarButton pulsante;


Si continua a scrivere le istruzioni per la creazione della barra e del pulsante, e la gestione dell’evento click del pulsante.
Qui di seguito tali dichiarazione.



VB.Net

Private Sub CreaBarra()

        ComBar = Globals.ThisAddIn.Application.ActiveExplorer().CommandBars.Add("Esempio EML", 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 = "Salva Formato EML VB"

        pulsante.Style = Office.MsoButtonStyle.msoButtonIconAndCaption

        pulsante.TooltipText = "Salva l'email in formato eml."

        pulsante.FaceId = 2605

 

        AddHandler pulsante.Click, AddressOf pulsante_Click

 

    End Sub

 

C#

   private void CreaBarra()

        {

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

                   "Esempio EML",

                   Office.MsoBarPosition.msoBarTop,

                   false,

                   true);

            ComBar.Protection = Office.MsoBarProtection.msoBarNoCustomize;

            ComBar.Visible = true;

        }

 

        //funzione per la creazione del pulsante

        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 = "Salva Formato EML";

            pulsante.Style = Office.MsoButtonStyle.msoButtonIconAndCaption;

            pulsante.TooltipText = "Salva l'email in formato eml.";

            pulsante.FaceId = 2605;

            //gestore dell'evento click

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

        }


Queste funzioni saranno richiamate nell’evento “StartUp del compoenente.
Qui di seguito il 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();

        }


Nell’evento click del pulsante, scriveremo il codice che permette di gestire l’email, in particolare la possibilità di verificare se l’email selezionata è di tipo pec, in tal caso verranno eseguite le funzioni per l’esportazione.
Qui di seguito si riporta il codice per i linguaggi VB.Net e C#




VB.Net

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

 

        Try

            'Verifico che ho selezionato almeno una email

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

                Dim PR_ATTACH_DATA_BIN As String = "http://schemas.microsoft.com/mapi/proptag/0x37010102"

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

 

                If TypeOf objectSelezionato Is Outlook.MailItem Then

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

 

 

                    For Each elemento As Outlook.Attachment In mailItemSelezionato.Attachments

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

                            Esporta(mailItemSelezionato)

                        End If

                    Next

                End If

 

 

            End If

        Catch ex As Exception

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

        End Try

 

 

 

    End Sub

C#

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

        {

 

            try

            {

                System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor;

 

                //Verifico che ho selezionato almeno una email

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

                {

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

                    if (selObject is Outlook.MailItem)

                    {

                        Outlook.MailItem mailItemSelezionato =

                            (selObject as Outlook.MailItem);

                        foreach (Outlook.Attachment elemento in mailItemSelezionato.Attachments)

                        {

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

                            {

                                Esporta(mailItemSelezionato);

                            }

                        }

 

 

 

                    }

                    else

                    {

                        System.Windows.Forms.MessageBox.Show("Selezionare una email", "", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    }

                }

 

            }

            catch (Exception ex)

            {

                System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default;

                System.Windows.Forms.MessageBox.Show("Si è verificato il seguente errore: " + ex.Message);

            }

            System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default;

 

        }


Si riporta il codice per la gestione dell’esportazione nel quale verrà creato un oggetto di tipo mailMessage, con il quale si generà il file di tipo eml con le informazioni e dati presenti nell’oggetto di tipo mailItem.
La funzione avrà il compito di trasformare i due oggetti e cancellare i file temporanei.
Qui di seguito le dichiarazioni per entrambi i linguaggi.


VB.Net

Private Sub Esporta(ByVal mailItemSelezionato As Outlook.MailItem)

        Try

            Dim application As Outlook.Application = New Outlook.Application()

 

            For Each elemento As Outlook.Attachment In mailItemSelezionato.Attachments

                If elemento.FileName.Contains(".eml") Then

                    Dim percorsoTemporaneo As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\TempFile\"

                    If Directory.Exists(percorsoTemporaneo) = False Then

                        Directory.CreateDirectory(percorsoTemporaneo)

                    End If

 

                    elemento.SaveAsFile(percorsoTemporaneo & "\" + elemento.FileName)

                    Dim mailItemEsistente As Outlook.MailItem = application.CreateItemFromTemplate(percorsoTemporaneo & "\" + elemento.FileName)

                    Dim mailMessaggeNuovo As New MailMessage()

                    mailMessaggeNuovo.From = New System.Net.Mail.MailAddress(mailItemEsistente.SenderEmailAddress)

                    mailMessaggeNuovo.[To].Add(mailItemEsistente.[To])

                    mailMessaggeNuovo.Body = mailItemEsistente.Body

                    If Not String.IsNullOrEmpty(mailItemEsistente.CC) Then mailMessaggeNuovo.CC.Add(mailItemEsistente.CC)

                    If Not String.IsNullOrEmpty(mailItemEsistente.BCC) Then mailMessaggeNuovo.Bcc.Add(mailItemEsistente.BCC)

                    mailMessaggeNuovo.Subject = mailItemEsistente.Subject

                    If mailItemEsistente.Attachments.Count > 0 Then

                        For Each allegatoPec As Outlook.Attachment In mailItemEsistente.Attachments

                            allegatoPec.SaveAsFile(percorsoTemporaneo & "\" + allegatoPec.FileName)

                            mailMessaggeNuovo.Attachments.Add(New System.Net.Mail.Attachment(percorsoTemporaneo & "\" + allegatoPec.FileName))

 

                        Next

                    End If

 

                    Dim emailConvertita As String = ConvertiEmailInEML(mailMessaggeNuovo)

                    

                    File.Delete(emailConvertita)

                    Directory.Delete(Path.GetDirectoryName(emailConvertita))

                    File.Delete(percorsoTemporaneo & "\" + elemento.FileName)

 

                End If

            Next

        Catch ex As Exception

            System.Windows.Forms.MessageBox.Show("Si è verificato il seguente errore: " & ex.Message)

        End Try

    End Sub

C#

  private void Esporta(Outlook.MailItem mailItemSelezionato)

        {

            try

            {

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

                const string PR_ATTACH_DATA_BIN = "http://schemas.microsoft.com/mapi/proptag/0x37010102";

                foreach (Outlook.Attachment elemento in mailItemSelezionato.Attachments)

                {

                    if (elemento.FileName.Contains(".eml"))

                    {

                        string percorsoTemporaneo = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);

                        elemento.SaveAsFile(percorsoTemporaneo + "\\" + elemento.FileName);

 

                        Outlook.MailItem mailItemEsistente = application.CreateItemFromTemplate(percorsoTemporaneo + "\\" + elemento.FileName);

 

                         MailMessage mailMessaggeNuovo = new  MailMessage();

                        mailMessaggeNuovo.From = new System.Net.Mail.MailAddress(mailItemEsistente.SenderEmailAddress);

                        mailMessaggeNuovo.To.Add(mailItemEsistente.To);

                        mailMessaggeNuovo.Body = mailItemEsistente.Body;

                        if (!string.IsNullOrEmpty(mailItemEsistente.CC))

                            mailMessaggeNuovo.CC.Add(mailItemEsistente.CC);

                        if (!string.IsNullOrEmpty(mailItemEsistente.BCC))

                            mailMessaggeNuovo.Bcc.Add(mailItemEsistente.BCC);

                        mailMessaggeNuovo.Subject = mailItemEsistente.Subject;

                        //Allegato

                        if (mailItemEsistente.Attachments.Count > 0)

                        {

                            foreach (Outlook.Attachment allegatoPec in mailItemEsistente.Attachments)

                            {

                                mailMessaggeNuovo.Attachments.Add(new System.Net.Mail.Attachment(new MemoryStream(allegatoPec.PropertyAccessor.GetProperty(PR_ATTACH_DATA_BIN)), allegatoPec.FileName));

                            }

 

                        }

                        string emailConvertita = ConvertiEmailInEML(mailMessaggeNuovo);

                        File.Delete(emailConvertita);

                        Directory.Delete(Path.GetDirectoryName(emailConvertita));

 

                        File.Delete(percorsoTemporaneo + "\\" + elemento.FileName);

 

 

 

                    }

                }

 

 

            }

            catch (Exception ex)

            {

 

                System.Windows.Forms.MessageBox.Show("Si è verificato il seguente errore: " + ex.Message);

            }

 

 

 

 

        }



Siamo giunti all’ultima parte della stesura del codice.
La funzione ConvertiEmailinEml permetterà di trasformare in un file sul computer l’email nel formato “eml” tramite la classe smtclient, che impostando la proprietà “PickupDirectoryLocation” genera un file.
Si riporta il frammento di codice per entrambi i linguaggi.



VB.Net

Private Function ConvertiEmailInEML(ByVal mailMessaggeNuovo As MailMessage) As String

        Try

            mailMessaggeNuovo.SubjectEncoding = System.Text.Encoding.UTF8

            mailMessaggeNuovo.BodyEncoding = System.Text.Encoding.UTF8

            mailMessaggeNuovo.Headers.Add("X-VirusFound", "false")

            mailMessaggeNuovo.Headers.Add("X-Spam", "Score=1.5")

            Using clientSMTP = New SmtpClient()

                Dim id = Guid.NewGuid()

                Dim CartellaTemporanea = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

                CartellaTemporanea = Path.Combine(CartellaTemporanea, "TempEmail")

                CartellaTemporanea = Path.Combine(CartellaTemporanea, id.ToString())

                If Not Directory.Exists(CartellaTemporanea) Then

                    Directory.CreateDirectory(CartellaTemporanea)

                End If

 

                clientSMTP.UseDefaultCredentials = True

                clientSMTP.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.SpecifiedPickupDirectory

                clientSMTP.PickupDirectoryLocation = CartellaTemporanea

                clientSMTP.Send(mailMessaggeNuovo)

                Dim percorsoFileEML = Directory.GetFiles(CartellaTemporanea).Single()

                Return percorsoFileEML

            End Using

        Catch ex As Exception

            System.Windows.Forms.MessageBox.Show("Si è verificato il seguente errore: " & ex.Message)

            Return ""

        End Try

    End Function

C#

  private string ConvertiEmailInEML(MailMessage mailMessaggeNuovo)

        {

            try

            {

                mailMessaggeNuovo.SubjectEncoding = System.Text.Encoding.UTF8;

                mailMessaggeNuovo.BodyEncoding = System.Text.Encoding.UTF8;

                //intestazione da aggiungerne altre se si vuole

                mailMessaggeNuovo.Headers.Add("X-VirusFound", "false");

                mailMessaggeNuovo.Headers.Add("X-Spam", "Score=1.5");

 

 

                using (var clientSMTP = new  SmtpClient())

                {

                    var id = Guid.NewGuid();

 

                    var CartellaTemporanea = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);

 

                    CartellaTemporanea = Path.Combine(CartellaTemporanea, "TempEmail");

 

                   

                    CartellaTemporanea = Path.Combine(CartellaTemporanea, id.ToString());

 

                    if (!Directory.Exists(CartellaTemporanea))

                    {

                        Directory.CreateDirectory(CartellaTemporanea);

                    }

 

                    clientSMTP.UseDefaultCredentials = true;

 

                    clientSMTP.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.SpecifiedPickupDirectory;

                    //indico che viene generato il file anzichè spedito

                    clientSMTP.PickupDirectoryLocation = CartellaTemporanea;

                    clientSMTP.Send(mailMessaggeNuovo);

 

                    var percorsoFileEML = Directory.GetFiles(CartellaTemporanea).Single();

                    return percorsoFileEML;

 

                }

            }

            catch (Exception ex)

            {

 

                System.Windows.Forms.MessageBox.Show("Si è verificato il seguente errore: " + ex.Message);

                return "";

            }

        }



Conclusioni

L’articolo ha voluto fornire interessanti spunti sulla programmazione Office, in particolare con Outlook tramite la tecnologia VSTO, realizzando un componente aggiuntivo che permette di convertire una email di Outlook in un file di tipo “eml” ma solo se tale email è di tipo “PEC”.
Le potenzialità offerte da questa tecnologia, rendono facile lo sviluppo di Office ed al tempo stesso di estendere le funzionalità del pacchetto office, in questo caso di Microsoft Office Outlook, con interessanti aspetti che il programmatore vuole aggiungere.