Olá pessoal!

Estou novamente trazendo mais um artigo o qual considero no mínimo interessante.

Como enviar um e-mail com todo o conteúdo e as propriedades de um Gridview?

Pois bem, vocês verão ao final deste artigo que isso é muito fácil de ser programado.

Espero que gostem e que obviamente seja útil a todos...

Em anexo está o projeto completo deste artigo...

 

Antes de iniciarmos com esse artigo, vamos configurar o nosso servidor SMTP.

Este servidor SMTP pode ser instalado no mesmo instante da instalação do IIS.

 

Configurações do Serviço SMTP

Para configurar o SMTP server teremos que seguir os passos indicados abaixo:

Abra o IIS e clique com o botão direito do sobre a opção Servidor virtual SMTP Padrão e escolha Propriedades como ilustrado na figura 1.

 

figura 1.gif

Figura 1 – Internet Information Services (IIS)

 

 

Ao clicar sobre a opção propriedades será exibido a janela da figura 2, onde você deve escolher o seu endereço de IP no campo Endereço de IP.

 

figura 2.gif

Figura 2 - Propriedades de Servidor virtual SMTP padrão

 

 Faça as configurações como na Figura 2, selecionando seu próprio endereço de IP.

 

Passe agora para a aba Acesso e clique em Retransmitir. Você terá agora a tela da Figura 3A onde você deve clicar no botão Adicionar e na janela ilustrada na figura 3B você deve informar o localhost com endereço de IP 127.0.0.1.

Para finalizar, confirme as configurações clicando a seqüência de botões OK – OK – Aplicar – OK.

 

figura 3.gif

Figura 3A/3B. Configurando a retransmissão das mensagens  / Configurando a conexão

 

Bem vamos agora ao envio de email com o conteúdo de um Gridview.

 

Crie um novo WebSite. Neste artigo estou usando C# como "Language".

 

Coloque na página um controle Button, um Gridview, um Label e um SQLDataSource (Para conexão com SQL Sever) e faça uma vinculação simples a uma base de dados qualquer, apenas para que tenhamos conteúdo no gridview para ser enviado por email. Veja na figura 4 o layout do meu exemplo.

 

figura 4.gif

Figura 4 – Layout Gridview

 

 

No Solution Explorer, clique com o botão direito do mouse sobre o projeto e escolha Add New Item. Selecione a opção Class e clique em OK. Vamos criar uma classe com o seguinte código:

 

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

/// <summary>

/// Summary description for Class1

/// </summary>

public class MinhaPagina : Page

{

 

  public override void VerifyRenderingInServerForm(Control controle)

  {

 

    GridView grid = controle as GridView;

 

    if (grid != null && grid.ID == "GridView1")

      return;

    else

      base.VerifyRenderingInServerForm(controle);

 

  }

 

}

 

 

Explicando o código acima:

 

O código adicionado na classe que criamos se faz necessário, pois se não o fizermos ao tentar enviar o email com o Gridview vai ocorrer uma exceção, isso porque o controle GridView deve ser colocado dentro de um elemento de FORMULÁRIO (HtmlForm). Isto se deve ao fato de que ao executar o RenderControl o método VerifyRenderingInServerForm da página será chamado para verificar se o controle está sendo renderizado  dentro do elemento do FORMULÁRIO (tag Form). Neste caso devemos tratá-lo manualmente, para que não tenhamos problemas com exceções (erros).

Para certificar-se de tal problema, podemos, como em nosso exemplo, criar nossa própria página customizada e cancelar o método VerifyRenderingInServerForm. Obviamente você deverá também herdar nossa classe customizada.

 

Nossa classe está pronta, vamos agora trabalhar na página Default.aspx onde temos nossos controles.

 

Em modo Design da página Default, clique duas vezes sobre o botão para criar o procedimento padrão para o controle Button e adicione a esse evento o seguinte código:

 

 

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.IO;       //NameSpace para os objetos do tipo StringWriter/ HtmlTextWriter...

using System.Web.Mail; //Importamos o NameSpace para envio de E-mail

 

public partial class _Default : MinhaPagina //Herdando a classe MinhaPagina 

{

    protected void Page_Load(object sender, EventArgs e)

    { 

    }

 

  protected void btnEnviarEmail_Click(object sender, EventArgs e)

  {

    try

    {

      //Crio uma instância da classe MinhaPagina

      MinhaPagina tmpPage = new MinhaPagina();

 

      //Crio um objeto do tipo HtmlForm

      HtmlForm formulario = new HtmlForm();

 

      //Passo para o objeto o controle Gridview da página Default.aspx

      formulario.Controls.Add(GridView1);

 

      //E agora passo o formulário com todo o seu conteúdo para a minha página

      //Desta forma não teremos problemas ao renderizar o controle

      //pois o mesmo será feito através da nossa customização

      tmpPage.Controls.Add(formulario);

 

 

      //Nas próximas linhas eu criou um objeto do tipo StringWriter e

      //outro HtmlTextWriter passando o conteúdo total do Gridview Renderizado.

      //Em seguida crio uma string e atribuo a ela o texto (código HTML) gerado na renderização.

      StringWriter sw = new StringWriter();

      HtmlTextWriter textoHTML = new HtmlTextWriter(sw);

      formulario.Controls[0].RenderControl(textoHTML);

      string ConteudoHTML = sw.ToString();

 

      //Instacio um objeto do tipo MailMessage

      MailMessage Email = new MailMessage();

 

      //Atribuo ao método From o valor do Remetente

      Email.From = "valdir.rsilva@gmail.com";

 

      //Atribuo ao método To o valor do Destinatário

      Email.To = "beckeronline@hotmail.com";

 

      //Atribuo ao método Subject o assunto da mensagem

      Email.Subject = "Envio de Email com o conteudo do GridView";

 

      //Atribuo ao corpo da mensagem o o código HTML para o Gridview

      Email.Body = ConteudoHTML;

 

      // Define o formato da mensagem que pode ser Texto ou Html

      Email.BodyFormat = MailFormat.Html;

 

      // Define a prioridade do E-mail

      Email.Priority = MailPriority.High;

 

      //Intancio e atribuo um objeto do tipo SmtpMail

      //passando o endereço do Servidor

      SmtpMail.SmtpServer.Insert(0,"127.0.0.1");

 

      //Envia a mensagem baseado nos dados do objeto Email

      SmtpMail.Send(Email);

      Label1.Text = "Email enviado com sucesso!!!";

    }

    catch

    {

      Label1.Text = "Falha no Envio do Email";

    }

  }

}

 

 

Execute sua aplicação e clique no botão enviar, você deve ver o resultado da figura 5.

 

figura 5.gif

Figura 5 – Enviado o E-mail

 

 

Agora vou verificar meu email, veja figura 6.

 

figura 6.gif

Figura 6 – Caixa de entrada do Hotmail com o Gridview.

 

 

Vale lembrar que após enviar o e-mail (PostBack) o gridview não será renderizado na página Default.aspx, portanto só será apresentado na tela o botão e a mensagem. Claro que como esse é apenas um exemplo didático não fiz tratamento algum para esse fato, do tipo redirecionar a página ou criar um link etc. Isso fica como tarefa pra você.

 

E é isso pessoal, espero que tenham apreciado mais um dos meus tutoriais...

 

Peço a gentileza que comentem meus artigos, isso é fundamental para dar procedimento a esse trabalho e também para ter uma idéia do nível de utilidade dos artigos que estou escrevendo e dessa forma criar um counteúdo cada vez mais interessante de boa utilidade.

 

Um grande abraço e até breve!!!