Examehosting - Informações e Pesquisas sobre hospedagem de sites no Brasil - http://www.examehosting.com
Enviando Emails com ASP.NET 2.0
http://www.examehosting.com/articles/47/1/Enviando-Emails-com-ASPNET-20/Pagina1.html
José Carlos Macoratti
José Carlos Macoratti é um profissional dedicado a área de desenvolvimento com ASP .NET. Ele mantém seu próprio site com artigos e dicas sobre ASP .NET no endereço http://www.macoratti.net . 
Por José Carlos Macoratti
Publicado em 26/02/2008
 
O namespace System.Net.Mail é o novo recurso da versão 2.0 para enviar e-mail . Na versão 1.1 usávamos o namespace System.Web.Mail.SmtpMail que é agora obsoleto. Neste artigo, José Carlos Macoratti explica como usar este namespace para enviar e-mails com ASP.NET 2.0.

O namespace System.Net.Mail é o novo recurso da versão 2.0 para enviar e-mail . Na versão 1.1 usávamos o namespace System.Web.Mail.SmtpMail que é agora obsoleto.

A primeira coisa que você vai notar é que o namespace mudou de System.Web.Mail para System.Net.Mail. e que agora para conseguir a mesma funcionalidade existem duas novas classes :

MailMessage() - representa uma mensagem de e-mail e possui as propriedades : From, To , Subject , Body , etc.;
SmtpClient() - envia uma instância especificada de MailMessage para um servidor SMTP definido.

Para usar você deverá criar uma instância para o objeto :

Dim Mensagem as MailMessage = new MailMessage()
Dim Email As New SmtpClient("
macoratti@yahoo.com")

Efetuando uma comparação entre os métodos usados temos as seguintes diferenças entre a versão 2.0 e versão 1.1:

  • System.Net.Mail.SmtpClient é usado no lugar de System.Web.Mail.SmtpMail que esta obsoleta;
  • System.Net.MailMessage é usado no lugar de System.Web.Mail.MailMessage que agora esta obsoleta;
  • A classe System.Net.MailMessage coleta o endereço de origem como um objeto MailAddress;
  • A classe System.Net.MailMessage coleta os endereços de destino , CC, Bcc como um MailAddressCollection.
  • O corpo da mensagem Body foi substituído por IsBodyHtml

Para enviar um e-mail de uma página ASP.NET 2.0 siga o roteiro:

  1. Crie um objeto MailMessage;
  2. Atribua as suas propriedades (geralmente coletadas de um formulário na página web);
  3. Crie uma instância da classe SmtpClient;
  4. Especifique detalhes sobre o servidor SMTP a ser usado;
  5. Envie o objeto MailMessage usando o método Send do objeto SmtpClient;

As demais classes do namespace System.Net.Mail permitem um tratamento mais avançado para a funcionalidade de enviar e-mail. Existem classes que podem ser usadas para incluir anexos a um e-mail, para embutir objetos , para especificar a informação de autenticação do servidor SMTP e classes para tratamento de erros específicos SMTP.

Como exemplo vamos criar um projeto bem simples para enviar e-mail onde iremos criar uma classe chamada Email.vb.

Abra o Visual Web Developer Express Edition e crie um novo web site na opção File->New web site com o nome de enviaEmail.

Na janela Solution Explorer clique com o botão direito do mouse sobre o nome do projeto e selecione a opção Add New Item;

Na janela - Add New Item - selecione o template Class e informe o nome Email.vb clicando a seguir no botão Add;



Seria criada uma pasta App_Code onde o arquivo será salvo. Vamos incluir o código abaixo no arquivo Email.vb:

Public Class Email
''' Envia um email
''' </summary>
''' <param name="from">Endereco do Remetente</param>
''' <param name="recepient">Destinatario</param>
''' <param name="bcc">recipiente Bcc</param>
''' <param name="cc">recipiente Cc</param>
''' <param name="subject">Assunto do email</param>
''' <param name="body">Corpo da mensagem de email</param>
Public Shared Sub enviaMensagemEmail(ByVal from As String, ByVal recepient As String, ByVal bcc As String, _
ByVal cc As String, ByVal subject As String, ByVal body As String)


' cria uma instância do objeto MailMessage
Dim mMailMessage As New MailMessage()
' Define o endereço do remetente
mMailMessage.From = New MailAddress(from)
' Define o destinario da mensagem
mMailMessage.To.Add(New MailAddress(recepient))

' Verifica se o valor para bcc é null ou uma string vazia
If Not bcc Is Nothing And bcc <> String.Empty Then
' Define o endereço bcc
mMailMessage.Bcc.Add(New MailAddress(bcc))
End If

' verifica se o valor para cc é nulo ou uma string vazia
If Not cc Is Nothing And cc <> String.Empty Then
' Define o endereço cc
mMailMessage.CC.Add(New MailAddress(cc))
End If

' Define o assunto
mMailMessage.Subject = subject
' Define o corpo da mensagem
mMailMessage.Body = body

' Define o formato do email como HTML
mMailMessage.IsBodyHtml = True
' Define a prioridade da mensagem como normal
mMailMessage.Priority = MailPriority.Normal

' Cria uma instância de SmtpClient - Nota - Define qual o host a ser usado para envio
' de mensagens, no local de smtp.server.com use o nome do SEU servidor

Dim mSmtpClient As New SmtpClient("smtp.server.com")
' Envia o email
mSmtpClient.Send(mMailMessage)
End Sub
End Class


Selecione a seguir a página Default.aspx e no modo Design crie a interface configure a figura abaixo. Para isto você deverá fazer o seguinte :

- No Menu Layout , selecione Insert Table e a seguir defina uma tabela com 8 linhas(Rows) e 2 colunas(Columns) ;





Inclua a partir da ToolBox os seguintes controles ajustando a tabela criada conforme a figura abaixo:

  • Label
  • TextBox
  • Button

Agora vamos incluir o code-behind no arquivo Default.apx.vb para usar o método envaMensagemEmail() da classe Email passando os parâmetros para compor o e-mail:

Protected Sub btnEnviaEmail_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEnviaEmail.Click

If (txtDe.Text = String.Empty) Or (txtPara.Text = String.Empty) Or (TxtAssunto.Text = String.Empty) Then
     lblmsg.Text = "Valores para compor o email são inválidos, verifique preenchimento..."
Else
     Email.enviaMensagemEmail(txtDe.Text, txtPara.Text, txtBcc.Text, txtCc.Text, TxtAssunto.Text, txtBody.Text)
End If
End Sub

Note que eu não precisei criar uma instância da classe para usar o método pois o mesmo é estático.

Pronto ! , temos um projeto preparado e pronto para enviar e-mails.

O exemplo vai funcionar se você tentar enviar o e-mail do seu domínio usando o seu servidor SMTP visto que você estará autenticado.

Se você for enviar um e-mail a partir do Outlook ou do Gmail o programa de e-mail estabelece uma conexão com o servidor  e envia o conteúdo da mensagem. O servidor aceita a mensagem e então se conecta com o servidor SMTP e envia a mensagem.

Para enviar um e-mail a partir de uma página  ASP.NET você precisa fornecer informação sobre o servidor como nome , a porta (geralmente a 25) se esta usando ou não SSL e as credenciais de autenticação(se necessário). Você pode configurar um serviço SMTP local instalado no seu computador ou usar um servidor de um servidor remoto.

Para armazenar as informações sobre o servidor que esta usando você pode usar o arquivo web.config. Para isso inclua um elemento <system.net> no interior do elemento <configuration> e então inclua um elemento <mailSettings> que contém um elemento <smtp> cuja configuração deve estar definida no elemento filho <network> , veja abaixo um exemplo de web.config configurado para um servidor SMTP:

<configuration>

  <system.net>
    <mailSettings>
      <smtp>
        <network
             host="nomedoseuservidor"
             port="numerodaporta"
             userName="usuario"
             password="senha" />
      </smtp>
    </mailSettings>
  </system.net>
  <system.web>
    ...
  </system.web>

</configuration>


A seguir um exemplo de um envio de e-mail usando as configurações do web.config a partir de uma página ASP.NET :

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    Const destino As String = "
seu@email.com"
    '(1) Cria uma instãncia de MailMessage
    Dim mm As New MailMessage(EmailDestino.Text, destino)
    '(2) Define as  propriedades de MailMessage
    mm.Subject = Subject.Text
    mm.Body = Body.Text
    mm.IsBodyHtml = False
    '(3) Cria um objeto SmtpClient
    Dim smtp As New SmtpClient
    '(4) Envia o MailMessage (usando as configurações do Web.config)
    smtp.Send(mm)
End Sub

 


Enviando E-mals com anexos

Para enviar um email com anexos a ASP.NET necessita permissão de ler o arquivo e anexá-lo na classe MailMessage. Se o arquivo estiver no site web você não precisa usar um caminho absoluto , pode usar o recurso Server.MapPath().

No exemplo abaixo eu coloquei o código no evento click de um botão de comando mas poderia ter criado como uma rotina que seria chamada ou ainda como um método da classe criada cima:

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click

'cria uma instância de MailMessage
Dim mail As New MailMessage()

'define o endereço

mail.From = New MailAddress("eu@minhaempresa.com.br")
mail.To.Add("voce@seuemail.com")

'define o conteúdo
mail.Subject = "Teste de envio de email"
mail.Body = "Body"

'IncluI um anexo a partir do arquivo de sistema
mail.Attachments.Add(New Attachment("c:\temp\exemplo.txt"))

'Para incluir mais anexos basta usar .Add(...) novamente
mail.Attachments.Add(New Attachment("c:\temp\exemplo2.txt"))
mail.Attachments.Add(New Attachment("c:\temp\exemplo3.txt"))

'envia a mensagem AQUI informe o seu host
Dim smtp As New SmtpClient("127.0.0.1")
smtp.Send(mail)
End Sub


Como percebemos enviar e-mail com ASP.NET 2.0 é muito simples. 

* O projeto completo está disponível para Download - baixe o arquivo enviaEmail2.zip.