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.
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.
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.
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.
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.
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.
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;
}
}
}