VB .NET  - Enviando E-mails


Recebi alguns consultas recentemente sobre como enviar e-mails no VB 2005. A resposta é bem simples :

Basta você referenciar o namespace System.Net.Mail, criar um formulário , definir as variáveis da classe e pronto.

Você pode seguir os mesmos procedimentos indicados no artigo :   ASP.NET  2.0 - Enviando Email  

Então se você quer enviar e-mails no VB .NET atente para os seguintes detalhes:

O namespace System.Net.Mail é o novo recurso 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 :

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:

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

Para enviar um e-mail em uma aplicação VB.NET siga o roteiro:

  1. Inclua uma referência ao namespace System.Net.Mail no seu projeto;
  2. Crie um objeto MailMessage;
  3. Atribua as suas propriedades (geralmente coletadas de um formulário na página web);
  4. Crie uma instância da classe SmtpClient;
  5. Especifique detalhes sobre o servidor SMTP a ser usado;
  6. 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.

Enviando Emails

Crie um novo projeto do windows application no Visual Basic 2005 Express Edition com o nome enviaEmail.

Defina no formulário form1.vb o leiaute conforme a figura abaixo:

Inclua a partir da ToolBox um componente OpenFileDialog e altere o seu  nome para OFD: (ele irá aparecer na bandeja do formulário)

Declare no início do formulário o seguinte namespace:  Imports System.Net.mail

A seguir defina os seguintes objetos que serão usados para criar e enviar o email:

'usado para armazenar os anexos
Dim Attachment As
System.Net.Mail.Attachment

'cria uma mensagem a enviar
Dim Mailmsg As New
System.Net.Mail.MailMessage()

Vamos agora ao código usado no projeto:

Temos um controle ListBox - lstAnexos , que permite selecionar arquivos que serão enviados como anexos ao email.

A seguir temos o código dos botões : Incluir Anexo e Excluir Anexo que usa o OpenFileDialog para permitir a seleção de arquivos:

Private Sub btnIncluiAnexo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIncluiAnexo.Click


'Mostra caixa de dialogo para selecionar anexos

Dim Conta As Integer


OFD.CheckFileExists =
True

OFD.Title = "Selecione um arquivo para anexar"

OFD.ShowDialog()


For
Conta = 0 To UBound(OFD.FileNames)

    lstAnexos.Items.Add(OFD.FileNames(Conta))

Next

End Sub
 

Private Sub btnRemoveAnexo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveAnexo.Click

   'Remove os anexos

   If lstAnexos.SelectedIndex > -1 Then

         lstAnexos.Items.RemoveAt(lstAnexos.SelectedIndex)

   End If

End Sub

A seguir o código do botão Enviar Email que faz uma validação dos dados e envia o email:

Private Sub btnEnvia_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnvia.Click


Dim i As Integer = 0


'validação dos dados

If txtServidorSMTP.Text = "" Then

   MsgBox("Informe o nome do servidor SMTP ...!!!", MsgBoxStyle.Information, "Envia Email")

   Exit Sub

End If
 

If txtOrigem.Text = "" Then

   MsgBox("Informe o endereço de Origem ...!!!", MsgBoxStyle.Information, "Envia Email")

   Exit Sub

End If
 

If txtDestino.Text = "" Then

   MsgBox("Informe o endereço de destino ...!!!", MsgBoxStyle.Information, "Envia Email")

   Exit Sub

End If

 

If txtAssunto.Text = "" Then

   MsgBox("Informe o assunto do email ...!!!", MsgBoxStyle.Information, "Envia Email")

  Exit Sub

End If

 

'endereca o recipiente

Mailmsg.To.Add(New MailAddress(txtDestino.Text))


Dim
mSmtpCliente As New SmtpClient(txtServidorSMTP.Text)


'Especifica o formato

If chkFormato.Checked = True Then

   Mailmsg.IsBodyHtml = True

End If

 

'define o assunto

Mailmsg.Subject = txtAssunto.Text


'Anexa os arquivos um por um

For i = 0 To lstAnexos.Items.Count - 1

   Mailmsg.Attachments.Add(New Attachment(lstAnexos.Items(i)))

Next
 

'Corpo do EMail

Mailmsg.Body = txtMensagem.Text


'ENvia o email

mSmtpCliente.Send(Mailmsg)

End Sub

Pronto com isso você já pode enviar emails no VB 2005.

Usando uma classe para enviar Emails

Uma outra alternativa ao código acima seria criar uma classe chamada Email.vb cujo código é dado a seguir:

Imports System.Net.mail
 

Public Class 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, ByVal servidorSMTP 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(servidorSMTP)

' Envia o email

mSmtpClient.Send(mMailMessage)

End Sub


End
Class

Uma das formas de usar a classe é dada no código abaixo:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

If (txtOrigem.Text = String.Empty) Or (txtDestino.Text = String.Empty) Or (txtAssunto.Text = String.Empty) Or (txtServidorSMTP.Text = String.Empty) Then

    MsgBox("Valores para compor o email são inválidos, verifique preenchimento...")

Else

   Email.enviaMensagemEmail(txtOrigem.Text, txtDestino.Text, txtBcc.Text, txtCC.Text, txtAssunto.Text, txtMensagem.Text, txtServidorSMTP.Text)

End If

End Sub

E , é só isso....

Pegue o projeto completo aqui : enviaEmail.zip

Aguardo você no próximo artigo VB.NET...

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti