ASP.NET 2.0 - Enviando E-mails
O SMTP - Simple Email Transfer Protocol - é o protocolo padrão para a transmissão de mensagens eletrônicas na internet. O protocolo atual é conhecido como ESMTP e esta definido na RFC 2821. O protocolo SMTP usa a porta TCP 25.
Como o próprio nome denota o SMTP é um protocolo relativamente simples baseado em texto, onde um ou mais recipientes de uma mensagem são especificados e então a mensagem é transferida. Você pode testar o protocolo efetuando a comunicação com um servidor Smtp usando uma conexão telnet. Apos estabelecer a conexão com o servidor as mensagens enviadas pelo cliente são identificadas com a etiqueta C: e as enviadas pelo servidor pela etiqueta S:.
Abaixo um exemplo de uma típica conexão telnet iniciada por um cliente:
S: 220 www.exemplo.com ESMTP Postfix C: HELO mydomain.com S: 250 Ola mydomain.com C: MAIL FROM:<remetente@mydomain.com> S: 250 Ok C: RCPT TO:<friend@example.com> S: 250 Ok C: DATA S: 354 End data with <CR><LF>.<CR><LF> C: Subject: teste mensagem C: From: remetente@mydomain.com C: To: amigo@exemplo.com C: C: Ola, C: Isto é um teste. C: Tchau. C: . S: 250 Ok: queued as 12345 C: QUIT S: 221 Tchau |
Enviar e-mails com ASP.NET é uma tarefa bem simples de ser realizada. Na versão 1.1 da .NET Framework usávamos as classes do namespace System.Web.Mail. Na versão 2.0 temos novas classes localizadas no namespace System.Net.Mail.
Nota: Acompanhe o artigo ASP.NET - Enviando Emails : HTML e anexos. para saber como enviar emails na versão 1.1 do .NET Framework.
Para enviar um e-mail em ASP.NET 2.0 vamos usar basicamente duas classes do namespace System.Net.Mail:
As etapas principais para realizar esta tarefa em ASP.NET 2.0 são:
Nota: As etapas 1 e 2 podem ser suprimidas visto que o método Send da classe SmtClient pode aceitar um objeto MailMessage ou 4 parâmetros do tipo strings que representam o remetente (From), o destinatário (To), o assunto (Subject) e a mensagem (Body) que irão compor o email.
Além destas funcionalidades básicas o namespace System.Net.Mail contém classes que permitem a utilização de funcionalidades avançadas como:
Uma das principais tarefas que devemos efetuar para enviar um e-mail a partir de uma página ASP.NET é fornecer informações para a classe SmtpClient sobre o servidor. Precisamos informar o nome do servidor, a porta a ser usada (o padrão é a porta 25) se vamos usar SSL e as credenciais para autenticação quando necessárias.
Podemos definir estas informações via programação através das propriedades da classe StmpClient ou podemos centralizar as informações no arquivo web.config. Para usar o web.config devemos incluir um elemento <system.net> no interior do elemento <configuration>. A seguir incluímos um elemento <mailSettings> que contém um elemento <smpt> cujas configurações são definidas no interior do elemento filho <child>. A seguir um exemplo de um trecho do web.config contendo as configurações.
|
Vamos criar um projeto usando o Visual Web Developer para enviar e-mail a partir de uma página Asp.Net onde iremos efetuar as configurações do e-mail e do servidor SMTP via código.
Inicie o VWD e no menu File selecione a opção New Web Site. Informe o nome enviaEmail2 e clique em OK.
Será criada uma página Default.aspx e seu code-behind Default.aspx.vb e um arquivo web.config.
Selecione o arquivo Default.aspx e no modo Design insira uma tabela e alguns componentes: Button,Text, Label e CheckBox (HTML) conforme a figura abaixo:
A seguir no arquivo Defaultp.aspx.vb inclua o seguinte código que irá definir as propriedades do email e do servidor SMTP.
Imports System.Net.Mail Imports System.text Partial Class _Default Inherits System.Web.UI.Page Protected Sub btnEnviar_ServerClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEnviar.ServerClick 'cria objeto para receber os dados do email Dim oEmail As New MailMessage 'remetente do email oEmail.From = New MailAddress(txtRemetente.Text) 'destinatario do email oEmail.To.Add(txtDestinatario.Text) 'destinatario de copia do email oEmail.To.Add(txtCopiaPara.Text) 'destinatario de copia oculta oEmail.Bcc.Add(txtCopiaOculta.Text) 'prioridade de envio oEmail.Priority = MailPriority.Normal 'define o formato do email If chkFormato.Checked Then oEmail.IsBodyHtml = True Else oEmail.IsBodyHtml = False End If 'define o assunto do email oEmail.Subject = txtAssunto.Text 'define a mensagem principal do email oEmail.Body = txtMensagem.Text 'Para evitar problemas com caracteres especiais configuramos o Charset oEmail.SubjectEncoding = Text.Encoding.GetEncoding("ISO-8859-1") oEmail.BodyEncoding = Text.Encoding.GetEncoding("ISO-8859-1") 'cria o objeto SMTP Dim oSmtp As New SmtpClient oSmtp.Host = "Localhost" Try 'envia o email oSmtp.Send(oEmail) lblAviso.Text = "Email enviado com sucesso. " Catch ex As Exception lblAviso.Text = "Ocorreu um erro ao enviar o email : " & ex.Message Finally 'limpa o objeto da memória oEmail.Dispose() End Try End Sub End Class |
Ao clicar no botão - Enviar Email - o código acima cria os objetos necessários configurando-os com as informações recebidas do formulário e envia o e-mail usando o servidor SMTP.
Nota: Você deverá informar um servidor SMTP válido na propriedade Host para poder enviar os e-mails.
Até o próximo artigo ASP.NET...
José Carlos Macoratti