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:

telnet www.exemplo.com 25
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:

  1. Criar um objeto MailMessage
  2. Atribuir ao objeto as propriedades pertinentes ao Email (remetente, destinatário, assunto, mensagem,...)
  3. Criar uma instância de uma classe SmtpClient
  4. Definir detalhes sobre o servidor SMTP (Você pode fazer isto no web.config)
  5. Enviar o E-mail (MailMessage) usando o método Send do objeto SmtpClient.

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.

<configuration>
  <!-- Inclui configuração do email no elemento <system.net>-->
  <system.net>
    <mailSettings>
      <smtp>
        <network 
             host="smtp2.meuServidorSmtp.com" 
             port="25"
             userName="macoratti"
             password="senha" />
      </smtp>
    </mailSettings>
  </system.net>

  <system.web>
    ...
  </system.web>
</configuration>

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