Enviando E-mail

 

Este artigo explora as características do desenvolvimento de Email System de uma maneira simples e mostra como criar um mail service simples sem muito esforço. Estamos certos de que quem lê este artigo terá uma boa idéia a respeito do email service e de seus conceitos baseados em SMTP.

O Problema

Quantas vezes enfrentamos problemas causados por falta de conhecimentos técnicos e dos conceitos básicos a respeito do framework. Este artigo explora os conceitos por trás do Mail Server de uma maneira muito simples.

·         Explora as configuração do mail server usando SMTP;

·         Descreve o código de uma maneira muito interessante e simples;

·         Mostra as configurações necessárias para hosting em um web server;

·         Mostra as soluções para os problemas ocorridos em runtime.

 Explorando as Tecnologias

SMTP significa Simple Mail Transfer Protocol e os emails são enviados usando este protocolo perfeito. O .NET Framework provê uma classe SMTP que permite o envio de uma mensagem simples de e-mail. Se quisermos enviar um e-mail com funcionalidades adicionais, teríamos que usar a classe MailMessage. Com ajuda dessa classe, poderemos muito facilmente inserir anexos, estabelecer prioridades e muito mais. Podemos também enviar e-mail HTML usando esta classe.

Pré-requisitos para o Mail Server

 Em primeiro lugar, teremos que verificar se o SMTP Service está habilitado no IIS, isso é, no Internet Information Service (é um componente do Windows). Podemos verificar isso, na seção Add/Remove mostrada no Control Panel.

 Clique em Windows Component na seção Add/Remove Programs e verá a Figura 1.

email1.gif 

 Figura 1. Janela para adiconar/remover componentes do Windows

 Veja se o IIS está marcado ou não. Caso esteja marcado (instalado), clique em IIS (Internet Information Services) e terá a tela da Figura 2.

email2.gif 

 Figura 2. Escolhendo os componentes para instalar com o IIS

 A seguir, verifique se o SMTP Service está instalado ou não. Se o Service não está disponível, terá que selecionar o SMTP Service e seguir o assistente. Às vezes, pode ser que seja solicitado o CD do Windows XP para instalar os componentes. Agora o SMTP Mail Service está disponível para as aplicações.

 Configurações e Settings

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

1) Ir para Painel de Controle>Ferramentas Administrativas>Internet Information Services;

2) Clicar em Internet Information Services e localizar o Default SMTP Virtual Server.

3) Clicar de direita e ir para as propriedades como na Figura 3.

 

email3.gif 

Figura 3. Propriedade do SMTP Virtual Server

 Faça as configurações, como na Figura 3, selecionando seu próprio IP.

4) Agora vá para a aba Acesso e clique em Retransmitir. Terá a tela da Figura 4 e deverá configurá-la de acordo.

 

email4.gif 

Figura 4. Configurando a retransmissão das mensagens

 No aba Acesso teremos que configurar também apropriadamente as conexões, de acordo com a janela Conexão e deixar todos as outras configurações como estão, conforme a Figura 5.

 

email5.gif 

Figura 5. Configurando a conexão

 O IP address 127.0.0.1 representa o localhost. Agora estamos prontos para a aplicação.

 Fragmentos de Código

Adicione no Web Form alguns componentes, conforme a Figura 6.

 

email6.gif 

Figura 6. Exemplo do envio de e-mail

O fragmento de código para este projeto está explicado abaixo.

 

private void SendMail()

{

  try

  {

   'Criando o objeto MailMesagge

   MailMessage Email = new MailMessage();

   'Guardando o valor To no objeto

   Email.To = txtTo.Text;

   'Guardando o valor From no objeto

   Email.From = txtFrom.Text;

   'Guardando o valor CC no objeto

   Email.Cc = txtCC.Text;

   'Guardando o valor BCC no objeto

   Email.Bcc = txtBCC.Text;

   'Guardando o valor Subject no objeto

   Email.Subject = txtSubject.Text;

   'Especificando o email body

   Email.Body = txtMessage.Text;

   'Estabelecendo a prioridade do mail como high, low ou normal

   Email.Priority = MailPriority.High;

   'Formatando o mail como html ou text

   Email.BodyForma t= MailFormat.Text;

   

   'Verificando se tem ou não anexo.

   if(rbtnAttach.Checked)

   {

     'Adicionando anexo ao  mail

      Email.Attachments.Add(new MailAttachment(FileBrowse.Value));

   }

  'Especificando o SMTP Mail Server real.

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

  'Enviando o mail

  SmtpMail.Send(Email);

  'Chamando o método reset para apagar os text inseridos

  Reset();

  lblMessage.ForeColor = Color.Navy;

  lblMessage.Text= "*Seu email foi enviado com sucesso – Obrigado";

  }

 

  'Tratando as Exceções

  catch(Exception exc)

  {

   lblMessage.Text = "Envia erro:"+exc.ToString();

   lblMessage.ForeColor = Color.Red;

  }

}

 

Chamamos o método SendMail() com outro evento de clique de botão como mostrado abaixo.

 

private void btnSend_Click(objeto sender, System.EventArgs e)

{

  SendMail();

}

 

O bloco de código e o método Reset() estão abaixo.

  

private void Reset()

{

 'Buscando os controls do WebForm

 Control myForm=Page.FindControl("Form1");

 'Iterando cada control

 foreach(Control itl in myForm.Controls)

 {

  'Verificando se é um text box e limpando caso seja

  if(itl.GetType().ToString().Equals("System.Web.UI.WebControls.TextBox"))

   ((TextBox)itl).Text = "";

 }

}

 

Chame o método Reset() em outro evento de click de botão como mostrado abaixo.

 

private void btnCancel_Click(objeto sender, System.EventArgs e)

{

Reset();

}

 

Abaixo temos o código completo:

 

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

using System.Web.Mail;

namespace Email

{

///

/// Descrição resumida de WebForm1.

///

public class WebForm1: System.Web.UI.Page

{

  protected System.Web.UI.WebControls.Label lblFrom;

  protected System.Web.UI.WebControls.Label lblCC;

  protected System.Web.UI.WebControls.TextBox txtFrom;

  protected System.Web.UI.WebControls.TextBox txtCC;

  protected System.Web.UI.WebControls.TextBox txtTo;

  protected System.Web.UI.WebControls.Label lblTo;

  protected System.Web.UI.WebControls.Label lblEmailService;

  protected System.Web.UI.WebControls.TextBox txtBCC;

  protected System.Web.UI.WebControls.Label lblBCC;

  protected System.Web.UI.WebControls.Label lblSubject;

  protected System.Web.UI.WebControls.TextBox txtSubject;

  protected System.Web.UI.WebControls.Label lblMessage;

  protected System.Web.UI.WebControls.TextBox lblMessage;

  protected System.Web.UI.WebControls.Button btnSend;

  protected System.Web.UI.HtmlControls.HtmlInputFile FileBrowse;

  protected System.Web.UI.WebControls.Label lblAttachment;

  protected System.Web.UI.WebControls.RadioButton rbtnAttach;

  protected System.Web.UI.WebControls.RadioButton rbtnDetachment;

  protected System.Web.UI.WebControls.Button btnCancel;

 

  public string strAttachment;

 

  private void Page_Load(object sender, System.EventArgs e)

  {

       lblMessage.Text="";

  }

 

    #region Web Form Designer generated code

 

    override protected void OnInit(EventArgs e)

    {

    //

    // CODEGEN: Este call é requerido pelo ASP.NET Web Form Designer.

    //

      InitializeComponent();

      base.OnInit(e);

    }

 

    ///

    /// Método requerido pelo Designer support – não modificar

    /// o conteúdo deste método com o editor de código.

    ///

 

private void InitializeComponent()

{

  this.rbtnDetachment.CheckedChanged += new System.EventHandler(this.rbtnDetachment_CheckedChanged);

  this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);

  this.btnSend.Click += new System.EventHandler(this.btnSend_Click);

  this.rbtnAttach.CheckedChanged += new System.EventHandler(this.rbtnAttach_CheckedChanged);

  this.Load += new System.EventHandler(this.Page_Load);

}

 

#endregion

 

'Método para enviar o email 

private void SendMail()

{

  try

  {

   'Criando o objeto MailMesagge

   MailMessage Email = new MailMessage();

   'Guardando o valor To no objeto

   Email.To = txtTo.Text;

   'Guardando o valor From no objeto

   Email.From = txtFrom.Text;

   'Guardando o valor CC no objeto

   Email.Cc = txtCC.Text;

   'Guardando o valor BCC no objeto

   Email.Bcc = txtBCC.Text;

   'Guardando o valor Subject no objeto

   Email.Subject = txtSubject.Text;

   'Especificando o email body

   Email.Body = txtMessage.Text;

   'Estabelecendo a prioridade do mail como high, low ou normal

   Email.Priority = MailPriority.High;

   'Formatando o mail como html ou text

   Email.BodyForma t= MailFormat.Text;

  

   'Verificando se tem ou não anexo.

   if(rbtnAttach.Checked)

   {

     'Adicionando anexo ao  mail

      Email.Attachments.Add(new MailAttachment(FileBrowse.Value));

   }

  'Especificando o SMTP Mail Server real.

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

  'Enviando o mail

  SmtpMail.Send(Email);

  'Chamando o método reset para apagar os text inseridos

  Reset();

  lblMessage.ForeColor = Color.Navy;

  lblMessage.Text= "*Seu email foi enviado com sucesso – Obrigado";

  }

 

  'Tratando as Exceções

  catch(Exception exc)

  {

   lblMessage.Text = "Envia erro:"+exc.ToString();

   lblMessage.ForeColor = Color.Red;

  }

}

 

'Método para fazer o reset dos text fields

private void Reset()

{

  'Buscando os controls no WebForm

  Control myForm=Page.FindControl("Form1");

  'Iterando cada control

  foreach(Control itl in myForm.Controls)

{

 

'Verificando se é um text box e limpando quando for

if(itl.GetType().ToString().Equals("System.Web.UI.WebControls.TextBox"))

  ((TextBox)itl).Text = "";

}

}

 

'Eventos disparados para enviar o mail. 

private void btnSend_Click(objeto sender, System.EventArgs e)

{

  SendMail();

}

 

'Evento para cancelar o mail.

private void btnCancel_Click(objeto sender, System.EventArgs e)

{

  Reset();

}

 

'Evento para habilitar o desabilitar o File browser

private void rbtnAttach_CheckedChanged(objeto sender, System.EventArgs e)

{

  FileBrowse.Disabled = false;

}

 

'Evento para habilitar o desabilitar o File browser

private void rbtnDetachment_CheckedChanged(objeto sender, System.EventArgs e)

{

  FileBrowse.Disabled = true;

}

}

}