quarta-feira, 23 de março de 2011

Enviando e-mail pelo VB.NET

Olá pessoal,

Hoje vou postar como enviar e-mail através do VB.NET, o código esta comentado, então não será necessário explicar.

Antes de começar, no cabeçalho do código, onde ficam os Imports, coloque o seguinte importe para que nosso método de envio de e-mail possa funcionar.

Imports System.Net.Mail

Agora sim, o método para enviar o e-mail é este, logo abaixo:


   Protected Sub send()
        Dim objNovoEmail As New MailMessage
        Dim objSmtp As New SmtpClient

        'Adicionando o e-mail do remetente
        objNovoEmail.From = New MailAddress(txtEmailRemetente.Text)

        'Adicionando o e-mail do destinatário
        objNovoEmail.To.Add(New MailAddress(txtEmailDestinatario.Text))

        'Adiciona a prioridade do e-mail
        objNovoEmail.Priority = MailPriority.High

        'Adicionando o assunto ao atributo assunto
        objNovoEmail.Subject = txtAssunto.Text

        'Formato de e-mail em Html?
        objNovoEmail.IsBodyHtml = True

        'Inserir o corpo da mensagem no atributo Body
        objNovoEmail.Body = txtMensagem.Text

        'Configuração de tipagem da linguagem, para não aparecer caracteres estranhos na mensagem
        objNovoEmail.SubjectEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1")
        objNovoEmail.BodyEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1")

        'Adicionando os campos dos atributos da configuração do e-mail
        'parametros necessários para envio de e-mail.


        'Configuração do IP do servidor SMTP
        'Por exemplo: smtp.mail.yahoo.com.br (EXEMPLO)
        objSmtp.Host = txtServidorSmtp.Text
        objSmtp.Port = txtPorta.Text

        'Caso queira definir um tempo do timeout 
        'objSmtp.Timeout = 10


        'Define se deve usar autenticação ou não
        If txtUsuario.Text <> String.Empty And txtSenha.Text <> String.Empty Then
            objSmtp.Credentials = New System.Net.NetworkCredential(txtUsuario.Text, txtSenha.Text)
        End If

        If txtUsuario.Text = String.Empty Then
            objSmtp.UseDefaultCredentials = False
        End If

       'Habilitar SSL ou não? 
        objSmtp.EnableSsl = chkSSL.CheckState

        'Enviando a mensagem por e-mail
        Try
            objSmtp.Send(objNovoEmail)
        Catch ex As Exception
            Throw ex
        Finally
            objNovoEmail.Dispose()
        End Try
        objNovoEmail.Dispose()
    End Sub


Obs¹.: Atente-se que em alguns trechos de código os atributos estão recebendo alguns TextBox, que são do meu form (formulário visual).


No seu formulário (form) deverá ter um botão de enviar, que deverá colocar o seguinte código para chamar o método send().

Obs².: Atente-se que o código que deverá ser inserido no seu botão começa à partir do comando Try até o End Try.


Private Sub btnEnviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnviar.Click
        Try
            send()
            MessageBox.Show("E-mail enviado com sucesso!", "Send mail", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Catch ex As Exception
            MessageBox.Show("Falha!" & ex.ToString, "Send mail", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
   End Sub

Logo abaixo, um screen do projeto que fiz como teste, caso tenham dúvidas utilizem o campo para comentários que tentarei responder à todos da melhor forma possível.



Um abraço e bom estudo.

16 comentários:

  1. Cesar,

    Como faço para anexar um arquivo neste caso?

    ResponderExcluir
  2. Olá,

    Existe um atributo de Anexo no objeto do e-mail, basta você preenche-lo com o caminho do anexo.

    Fazendo desta forma eu consegui anexar apenas um arquivo por e-mail.

    []'s

    ResponderExcluir
    Respostas
    1. Cesar:
      É possível inserir uma imagem (LOGO) no corpo do texto ?

      Excluir
  3. César,

    Como pular linha no texto do e-mail, nos testes que fiz ao passar pelo objNovoEmail.Body o texto vira uma linha unica, poderia ajudar?

    Obrigado.

    ResponderExcluir
  4. Olá Cristian,

    Veja se o objeto objNovoEmail possui algum atributo referente a Html, acredito que se habilita-lo (caso exista) as mensagens serão enviadas no formato html, caso ainda não dê certo, tente enviar uma mensagem utilizando tags de codificação html, e ao receber o e-mail veja se ele deu as quebra de linhas através do < br >.

    Um abraço!

    ResponderExcluir
  5. As tags de html funcionam e permitem inclusive a criação de um modelo formatado para a mensagem, obrigado!

    ResponderExcluir
  6. De nada, mas resolveu o seu problema?

    Abraço!

    ResponderExcluir
  7. Problema resolvido, obrigado!

    ResponderExcluir
  8. Muito obrigado pelo codigo. Vlw msm

    ResponderExcluir
  9. De nada, precisando de ajuda estamos aí!

    ResponderExcluir
  10. Meu orgulho esse menino !

    ResponderExcluir
  11. César, preciso anexar arquivo no meu site. o usuário vai anexar um curriculum, estou usando asp:FileUpload. como anexar esse arquivo no código acima?
    Obrigada

    ResponderExcluir
  12. Para enviar como html sem precisar editar muita coisa coisa no codigo ou alterei o campo objNovoEmail.Body para o seguinte.

    objNovoEmail.Body = Replace(txtMensagem.Text, Chr(13), "
    ")

    Funcionou 300%.

    ResponderExcluir
  13. Para enviar como html sem precisar editar muita coisa coisa no codigo ou alterei o campo objNovoEmail.Body para o seguinte.

    objNovoEmail.Body = Replace(txtMensagem.Text, Chr(13), "
    ")

    Funcionou 300%.

    ResponderExcluir
  14. Boa tarde. Apenas uma dúvida, após enviar o e-mail, como salvar uma cópia do servidor de e-mails?

    ResponderExcluir