Asp.Net inviare tramite email i dati di un GridView

Articolo, che spiega come inviare via email, la rappresentazione dei dati di un controllo gridView, tramite il linguaggio VB.Net e C#.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

Introduzione

Vedremo una tecnica di come inviare un email, in cui nel corpo del messaggio è presente il controllo gridview.
Va ricordato che l’email dev’essere spedita in formata html, l’email che si riceverà è simile a quella inviata nella figura 1





Figura 1

Creazione del progetto

Dopo aver creato un progetto di tipo Web application, inserire nel progetto un controllo gridview ed un pulsante, il quale avrà il compito di inviare l’email.

Stesura del codice

Ora passiamo in visualizzazione codice, prima di tutto, dobbiamo aggiungere gli spazi dei nomi per la gestione dell’email e dei dati.
Di seguito si riporta lo spazio dei nomi per il linguaggio di programmazione VB.Net e C#

VB.Net

Imports System.Data
Imports System.Net
Imports System.Net.Mail

C#

using System.Data;
using System.Net;
using System.Net.Mail;


Occorre fare l’ovveride dell’evento VerifyRenderingInServerForm in questo modo possiamo ottenere il codice html del controllo gridview.
Di seguito si riporta la sintassi di tale operazione.


VB.Net

Public Overloads Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
        Exit Sub
    End Sub


C#

        public override void VerifyRenderingInServerForm(Control control)
        {
            return;
        }


In questo modo, non verrà generata nessuna eccezione
Ora dobbiamo creare la funzione per il caricamento dei dati nella griglia.
Qui di seguito la funzione per il caricamento dei dati per il controllo GridView


VB.Net

Private Sub CaricaDati()
        Dim Nome As New DataColumn("Nome")
        Dim Cognome As New DataColumn("Cognome")
        Dim riga As DataRow
        Dim dttTabella As New DataTable()
        dttTabella.Columns.Add(Nome)
        dttTabella.Columns.Add(Cognome)
        riga = dttTabella.NewRow()
        riga(0) = "EMa"
        riga(1) = "Maffei"
        dttTabella.Rows.Add(riga)
        riga = dttTabella.NewRow()
        riga(0) = "EMa2"
        riga(1) = "maffei3"
        dttTabella.Rows.Add(riga)
        riga = dttTabella.NewRow()
        riga(0) = "EMa3"
        riga(1) = "maffei2"
        dttTabella.Rows.Add(riga)
        GridView1.DataSource = dttTabella
        GridView1.DataBind()
    End Sub



C#

        private void CaricaDati()
        {
            DataColumn Nome = new DataColumn("Nome");
            DataColumn Cognome = new DataColumn("Cognome");
           
            DataRow riga;
            DataTable dttTabella = new DataTable();
            dttTabella.Columns.Add(Nome);
            dttTabella.Columns.Add(Cognome);
            riga = dttTabella.NewRow();
            riga[0] = "EMa";
            riga[1] = "Maffei";
            dttTabella.Rows.Add(riga);
            riga = dttTabella.NewRow();
            riga[0] = "EMa2";
            riga[1] = "maffei3";
            dttTabella.Rows.Add(riga);
            riga = dttTabella.NewRow();
            riga[0] = "EMa3";
            riga[1] = "maffei2";
            dttTabella.Rows.Add(riga);
            GridView1.DataSource = dttTabella;
            GridView1.DataBind();
        }


Questa funzione verrà richiamata nell’evento load della form
Ora dobbiamo creare una funzione, che converte il controllo griglia in html, o meglio una stringa con al suo interno del codice html.
Qui di seguito  si riporta la funzione  che estrapola dal controllo griglia il codice html.


VB.Net

Private Function TrasformaInTesto() As String
        Dim Testo As String = [String].Empty
        Dim sw As New System.IO.StringWriter()
        Dim hw As New HtmlTextWriter(sw)
        Try
            hw.RenderBeginTag(HtmlTextWriterTag.Html)
            hw.RenderBeginTag(HtmlTextWriterTag.Body)
            GridView1.RenderControl(hw)
            hw.RenderEndTag()
            hw.RenderEndTag()
            hw.Flush()
            Testo = sw.ToString()
        Finally
            hw.Close()
>            sw.Close()
        End Try

        Return Testo
    End Function

C#

private string TrasformaInTesto()
        {
            string Testo = String.Empty;
            System.IO.StringWriter sw = new System.IO.StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(sw);
            try
            {
                hw.RenderBeginTag(HtmlTextWriterTag.Html);
                hw.RenderBeginTag(HtmlTextWriterTag.Body);
                GridView1.RenderControl(hw);
                hw.RenderEndTag();
                hw.RenderEndTag();
                hw.Flush();
                Testo = sw.ToString();
            }
            finally
            {
                hw.Close();
                sw.Close();
            }
            return Testo;
        }

A questo punto siamo giunti quasi alla conclusione di questo articolo. Ora non resta che scrivere il codice per l’invio dell’email, che verrà applicato al controllo pulsante.
Dopo aver rilevato il testo html del controllo griglia, tramite l’oggetto di tipo MailMessage, impostiamo gli indirizzi email di colui che invia, riceve l’email, il testo dell’oggetto dell’email ed il testo del corpo. La proprietà ISBodyHtml impostata a True, permette di inviare l’email in formato html e quindi il destinatario visualizzerà nel corpo del messaggio, la griglia come si vede nella pagina web.
Tramite l’oggetto di tipo SmtpClient, dopo aver impostato il server email, utilizzando il metodo send viene iinviato il messaggio.

Qui di seguito il codice di tali operazioni.



VB.Net

Protected Sub BtnInvia_Click(ByVal sender As Object, ByVal e As EventArgs) Handles BtnInvia.Click
        Dim testo As String = TrasformaInTesto()
        Dim email As New MailMessage("emanuelemattei@dominio.it", " emanuelemattei@dominio.it ", "Oggetto", testo)
        email.IsBodyHtml = True
        Dim smtp As New SmtpClient("ServerMail")
        Try
            smtp.Send(email)
        Catch ex As Exception
            Response.Write(ex.Message)
        End Try
    End Sub

C#

protected void Button1_Click(object sender, EventArgs e)
        {
            string testo = TrasformaInTesto();
            MailMessage email = new MailMessage("emanuelemattei@dominio.it ", " emanuelemattei@dominio.it ", "Oggetto", testo);
            email.IsBodyHtml = true;
            SmtpClient smtp = new SmtpClient("ServerMail");
            try
            {
                smtp.Send(email);
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

Conclusioni

Abbiamo visto come inviare tramite email, le informazioni contenute in un controllo griglia, riportando nel corpo del messaggio il medesimo controllo. Tramite la parola download potete scaricare il file di progetto per entrambi i linguaggi.


Download