Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_c-net-5leggere-l%E2%80%99email-di-outolook-file-eml-e-msg-tramite-msgreade_1741.aspx
In questo articolo vedremo come leggere il contenuto e le informazioni di un file di tipo posta elettronica Microsoft Outlook, in ambiente Windows Application con C#.
Tramite la libreria MSGReader, vedremo come rilevare informazioni nei file di tipo “.msg” e “.eml” che possono essere anche di tipo “PEC” ossia posta elettronica certificata.
L’articolo si basa sulla versione del framework .Net 5.0 e Visual Studio 2019 community.
Creazione del progetto
Si crea un nuovo progetto di tipo Windows Application, tramite versione Framework 5.0 che è l’ultima versione appena rilasciata.
Dopo aver creato il progetto, aggiungiamo due pulsanti, uno che permetterà la lettura di file di tipo “.msg” e l’altro di tipo “.eml”, al primo pulsante impostiamo la proprietà name in “BtnLeggiMsg” e la proprietà “Text” con “Leggi file .msg”, mentre nell’altro pulsante impostiamo la proprietà “Name” con il valore “BtnLeggiEml” e la proprietà “Text” con il valore “Leggi file .eml”.
Ora dobbiamo aggiungere al nostro progetto il riferimento a MsgReader, un componente gratuito da Nuget che ci permette di gestire le email.
Per l’installazione possiamo procedere in due modi, o tramite la voce di menu “Console di Gestione pacchetti “ digitando il seguente comando:
Install-Package MSGReader -Version 3.12.4
Dove la versione indica quella al momento disponibile, oppure tramite la voce “Gestisci pacchetti per la soluzione…” e digitale nella casella il valore “MsgReader” il tutto come mostrato in figura 1.
Figura 1 – L’installazione del pacchetto.
Stesura del codice
Dopo aver aggiunto il componente non resta che scrivere il codice per leggere le nostre email, nel primo pulsante, quello con la dicitura “Leggi file msg” facciamo doppio click in modo che si passa in visualizzazione codice dell’evento click del pulsante. In questo evento, scriveremo il codice che permette di leggere le informazioni delle email con estensione di tipo “.msg”.
Qui di seguito il codice nell’evento click del pulsante.
#
private void
BtnLeggiMsg_Click(object sender, EventArgs e)
{
string Destinatario, Data,
Mittente, Oggetto, Testo, DestinatarioConoscenza;
using (var msg = new
MsgReader.Outlook.Storage.Message("c:\\varie\\test.msg"))
{
Mittente =
msg.Sender.DisplayName + " - " + msg.Sender.Email; ;
Data = msg.SentOn.HasValue ==
true ? msg.SentOn.Value.ToString("dd/MM/yyyy") : "";
Destinatario =
msg.GetEmailRecipients(MsgReader.Outlook.RecipientType.To, false, false);
DestinatarioConoscenza =
msg.GetEmailRecipients(MsgReader.Outlook.RecipientType.Cc, false, false);
Oggetto = msg.Subject;
Testo = msg.BodyText;
}
MessageBox.Show("Mittente:
" + Mittente + "Oggetto: " + Oggetto + " Testo: " +
Testo + "Data: " + Data + "Destinatario : " + Destinario +
"Destinatario CC:" + DestinatarioConoscenza);
}
Il codice appena riportato, crea un oggetto di tipo “Message” passando nel costruttore il percorso e nome del file che abbiamo nel nostro pc.
Tramite le varie proprietà di questo oggetto, andiamo a rilevare le informazioni, come il mittente, oggetto, destinatario, la data, il testo, e via continuando, che verranno a video.
Il codice è molto semplice da comprendere ed elenca solo alcune proprietà che la classe mette a disposizione riguardante la gestione delle email di tipo msg.
Ora passiamo in visualizzazione grafica, e nell’altro pulsante quello con la dicitura “Leggi file .eml” facciamo doppio click, in questo modo passiamo in visualizzazione codice ed in particolar modo nell’evento click del pulsante.
Prima di scrivere il codice per l’evento click della lettura dei file posta elettronica di tipo .eml, dobbiamo aggiungere lo spazio dei nomi IO, ossia la gestione dei file e cartelle.
In alto sopra dove si trovano altri spazio di nomi aggiungiamo tale dichiarazione, qui di seguito il codice.
C#
using
System.IO;
Ritorniamo all’evento click del pulsante, e scriviamo il codice per la gestione della lettura dei file di tipo “.eml”.
La classe che utilizzeremo per la gestione delle email è Message, come nel precedente frammento codice, tramite le varie proprietà, possiamo rilevare le informazioni che ci servono, per esempio destinatario, mittente, oggetto, data, e testo dell’email. Inoltre è possibile anche rilevare il dominio dell’email ed username.
Qui di seguito il frammento di codice delle suddette operazioni.
C#
private void
BtnLeggiEml_Click(object sender, EventArgs e)
{
var fileInfo = new
FileInfo("c:\\varie\\email.eml");
var eml =
MsgReader.Mime.Message.Load(fileInfo);
string Destinatario = "",
Oggetto, Mittente, Testo = "", Data;
if (eml.Headers != null)
{
if (eml.Headers.To != null)
{
foreach (var dest in
eml.Headers.To)
{
Destinatario += "
" + dest.DisplayName + " " + dest.Address;
}
}
}
Oggetto = eml.Headers.Subject;
Mittente = eml.Headers.From.DisplayName
+ " " + eml.Headers.From.MailAddress.Address;
Data = eml.Headers.Date;
if (eml.TextBody != null)
{
Testo =
System.Text.Encoding.UTF8.GetString(eml.TextBody.Body);
}
if (eml.HtmlBody != null)
{
Testo =
System.Text.Encoding.UTF8.GetString(eml.HtmlBody.Body);
}
MessageBox.Show("Mittente:
" + Mittente + "Oggetto: " + Oggetto + " Testo: " +
Testo + "Data: " + Data + "Destinatario : " + Destinatario );
}
Ora non ci resta che testare il nostro per estrapolare le informazioni delle email.
Conclusioni
L’articolo ha fornito le informazioni di base per poter utilizzare il componente gratuito MsgReader per la gestione dei file di tipo posta elettronica Microsoft Outlook, in particolare i file .msg e .eml.
Un componente che può tornare utile per lo sviluppo di applicazioni della gestione della posta elettronica o meglio dei file in tale ambito.