sábado, 4 de fevereiro de 2012

Windows Forms - Enviando Emails utilizando o Visual Studio

Neste artigo montaremos um exemplo bem simples de envio de E-mails com a possibilidade de enviar anexos e utilizando autenticação. Construiremos este exemplo utilizando os denominados “Windows Forms” com o Visual Studio 2005 junto com a linguagem C#.

Para isto abra o Visual Studio 2005 e em File/ New/ Project em Project Types deixe como “Visual C#” em “Templates” escolha “Windows Application” e na região inferior colocaremos um nome para nossa “solution” e escolheremos uma pasta para ser salvo, Veja Figura 01 para melhores detalhes.

Figura 01. Iniciando o projeto.

 Criando o formulário

Iremos alterar as seguintes propriedades do Formulário.

Name: FmEnvia
StartPosition: CenterScreen
Text: Windows Forms - Envio de E-mails
  
Em seguida colocaremos quatro componentes Textbox, quatro Labels, um Listbox e dois Buttons. 

O formulário deverá ficar parecido com o da figura 02. É importante ressaltar que no Textbox da Mensagem a propriedade Multiline foi deixada como true, ou seja, possibilita mais de uma linha.
  
Figura 02. Formulário de Envio.

Depois de montarmos o Layout de nosso exemplo iremos colocar mão na massa, vamos para a codificação do mesmo.

Trabalharemos com as classes contidas nos seguintes Namespaces:

using System.Net.Mail;
using System.Net;
  
Basta declará-las logo no início do programa para assim podermos utilizá-las!

Criaremos dois métodos simples, um para limpar os componentes após o Envio do E-mail e outro para habilitar e desabilitar os botões.
  
/* Limpar os componentes*/
private void Limpar()
  {
      textBox1.Clear();
      textBox2.Clear();
      textBox3.Clear();
      textBox4.Clear();
      listBox1.Items.Clear();
      textBox1.Focus();
  }


/* Habilitando e Desabilitando os botões*/
private void Hab_Des()
  {
     button1.Enabled = !button1.Enabled;
     button2.Enabled = !button2.Enabled;
  }


Codificando o botão Enviar

Agora, vamos para a implementação do código para envio do e-mail no evento Click do botão Enviar, confira abaixo. 


private void button1_Click(object sender, EventArgs e)
   {
           
     this.Cursor = Cursors.WaitCursor;
     Hab_Des();

     MailMessage mailMsgMensagem = new MailMessage(textBox1.Text, textBox2.Text);

     mailMsgMensagem.Subject = textBox3.Text;

     mailMsgMensagem.Body = textBox4.Text;
  
Nesta parte do código deixaremos o cursor do mouse como uma ampulheta (para dar a impressão do envio) em seguida chamaremos o método Hab_Des para assim desabilitarmos os botões.

A próxima linha utilizaremos a classe MailMessage para inserirmos o remetente e o(s) destinatário(s) respectivamente. Através das propriedades Subject e Body definimos o Assunto e o Corpo do E-mail respectivamente.
  
  • Configurando os anexos
 Para adicionarmos anexos ao nosso exemplo é muito simples, faremos um laço para pegarmos todos os itens contidos no Listbox e em seguida pelo método Attachments.Add da classe MailMessage iremos adicionando os anexos.

    for (int i = 0; i < listBox1.Items.Count; i++)
       {
           Attachment Anexo = new Attachment(@listBox1.Items[i].ToString());
           mailMsgMensagem.Attachments.Add(Anexo);
       }
  
  • Configurando as credenciais
É importante ressaltar que existem servidores de E-mails que solicitam autenticação no envio de E-mails , e isto é facilmente resolvido utilizando a classe NetworkCredential, confira logo abaixo:

   /* Configurando Credenciais (senha e usuário) */
   NetworkCredential Email = new NetworkCredential();

   Email.Password = "sua_senha";
   Email.UserName = "sua_conta";

Utilizaremos as proriedades Password e Username para definir Senha e usuário respectivamente.

  • Definindo o Servidor SMTP
Para definirmos o servidor SMTP usaremos a classe SmtpClient, logo em seguida adicionamos as credenciais definidas acima, veja abaixo o código simples.

SmtpClient ClientSMTP = new SmtpClient("smtp.seuprovedor.com.br");
ClientSMTP.Credentials = Email;

  • Enviando o E-mail
Criaremos um bloquinho Try... Catch... para tratarmos o envio do email, ou seja caso ocorra algum problema no envio levantaremos uma excessão e emitiremos uma mensagem ao usuário, caso contrário o e-mail será enviado com sucesso.
  
           try
             {
               ClientSMTP.Send(mailMsgMensagem);             
               MessageBox.Show("Email enviado com sucesso!");
             }
           catch (Exception Ex)
            {
              MessageBox.Show("Ocorreu algum problema ao enviar o Email Erro: " + Ex.Message);      
             }

            this.Cursor = Cursors.Default;
            Hab_Des();
            Limpar();
     }

Para enviarmos o E-mail basta utilizar o Método Send tendo como parâmetro o objeto oriundo da classe MailMessage, no nosso caso este objeto chama-se mailMesgMensagem.
           
Em seguida deixaremos o cursor como padrão, habilitaremos os botões e limparemos os componentes através do método Limpar.
  
Codificando o botão Anexar

Utilizaremos um componente chamado OpenFileDialog, encontrado na paleta Dialogs, ele servirá para escolher o arquivo a ser anexado.

private void button2_Click(object sender, EventArgs e)
        {
          if (openFileDialog1.ShowDialog() = = DialogResult.OK)
              listBox1.Items.Add(openFileDialog1.FileName);
        }

O método ShowDialog servirá para escolhermos o arquivo e o Listbox1.Items.Add para adicionarmos o path (caminho) dos arquivos escolhidos anteriormente.

Figura 03. Enviando E-mail.  

Conclusão

Vimos neste artigo como enviar E-mails com anexo e autenticação no servidor utilizando Windows Forms mas poderíamos utilizar Web Forms sem muitas alterações no código. Espero que tenham gostado, sucesso a todos e até a próxima! 

Nenhum comentário:

Postar um comentário