Article Details                  
 
Como enviar um e-mail usando ASP .NET e um servidor SMTP

Neste tutorial vamos aprender como enviar um e-mail numa aplicação Web usando a classe System.Web.Mail.

Como enviar um e-mail usando ASP .NET e um servidor SMTP


 


Neste tutorial vamos aprender como enviar um e-mail numa aplicação Web usando a classe System.Web.Mail, não podia ser mais fácil. :)


 


Pegando num exemplo práctico, na imagem abaixo está uma página da administração da aplicação Web Thalassa VII.net que permite enviar um e-mail a um utilizador, podem utilizar por exemplo numa página de contactos para que os visitantes do vosso site possam enviar uma mensagem fácilmente ou indo mais além, porque não fazer a vossa aplicação enviar uma mensagem ao webmaster sempre que acontece um erro?


 



           


 


1) Mãos ao trabalho


            A técnica que vou descrever utiliza a classe System.Web.Mail como já foi referido, vamos também usar a System.Text no nosso exemplo.


 


Exemplo 1) Uma página simples para enviar um e-mail


 


Criem uma nova aplicação Web, vão adicionando textboxes e label’s conforme o exemplo abaixo, eu dei um nome personalizado às textboxes para facilitar a sua compreensão, por ordem de cima para baixo temos:



  • txt_destino;

  • txt_cc;

  • txt_bcc;

  • txt_titulo;

  • txt_corpo;

  • bt_enviar (o botão).

 


 




 


            O aspecto do vosso código html deverá ser algo assim do género:


<body>


    <form id="form1" runat="server">


    <div>


        <asp:Label ID="Label1" Runat="server" Text="Destinatario"></asp:Label><br />


        <asp:TextBox ID="txt_destino" Runat="server"></asp:TextBox>


        <br />


        <asp:Label ID="Label2" Runat="server" Text="CC"></asp:Label><br/>


        <asp:TextBox ID="txt_cc" Runat="server"></asp:TextBox>


        <br />


        <asp:Label ID="Label3" Runat="server" Text="BCC"></asp:Label><br />


        <asp:TextBox ID="txt_bcc" Runat="server"></asp:TextBox>


        <br />


        <asp:Label ID="Label4" Runat="server" Text="Titulo"></asp:Label><br />


        <asp:TextBox ID="txt_titulo" Runat="server" Width="294px"></asp:TextBox>


        <br />


        <asp:Label ID="Label5" Runat="server" Text="Corpo"></asp:Label><br />


        <asp:TextBox ID="txt_corpo" Runat="server" TextMode="MultiLine" Width="294px" Height="161px"></asp:TextBox>


        <br />


        <br />


        <asp:Button ID="bt_enviar" Runat="server" Text="Enviar" OnClick="bt_enviar_Click" />


   


    </div>


    </form>


</body>


 


Agora vamos passar ao ficheiro code-behind, no topo do ficheiro só precisamos de colocar as seguintes linhas de código:


Imports System.Text


Imports System.Web.Mail


 


Ou seja, vamos importar as classes system.text e system.web.mail que possuem as funções necessárias para podermos enviar e-mail.


 


A seguir, só precisamos de adicionar o seguinte pedaço de código à função que acciona o botão bt_enviar:



Sub bt_enviar_Click(ByVal sender As Object, ByVal e As System.EventArgs)


 


        'MailMessage class


        Dim objMM As New MailMessage


 


        'to whom? quem é o destinatário?


        objMM.To = txt_destino.Text


    


        'carbon copy ou seja cópia do e-mail


        objMM.Cc = txt_cc.Text


 


        'blind carbon copy ou seja cópia anonima do mail


        objMM.Bcc = txt_bcc.Text


 


        'Assunto


        objMM.Subject = txt_titulo.Text


 


        'Corpo


        objMM.Body = txt_corpo.Text


 


        'email do admin -> ver web.config


        objMM.From = "toto@mail.com"


       


        'formato do email - texto ou html


        objMM.BodyFormat = MailFormat.Text


 


        'prioridade -> High, Low, Normal


        objMM.Priority = MailPriority.Normal


 


        'Smtp Server -> ver web.config


        SmtpMail.SmtpServer = "mail.netcabo.pt"


 


        Try


            'Send method


            SmtpMail.Send(objMM)


 


        Catch ex As Exception


            Throw ex


        End Try


 


    End Sub


 


            Parece muito grande mas vão ver que é bastante simples, vamos começar devagar do topo.


            A primeira coisa que fizemos foi declarar um objecto do tipo mailmessage, ou seja, a nossa mensagem de e-mail.


 


      'MailMessage class


      Dim objMM As New MailMessage


 


            De seguida, utilizamos os métodos To, Cc, Bcc, Subject e Body para igualarmos o destinatário, titulo, corpo, etc do nosso recém-criado objecto aos que escrevemos nas textboxes.


 


        'to whom? quem é o destinatário?


        objMM.To = txt_destino.Text


    


        'carbon copy ou seja cópia do e-mail


        objMM.Cc = txt_cc.Text


 


        'blind carbon copy ou seja cópia anonima do mail


        objMM.Bcc = txt_bcc.Text


 


        'Assunto


        objMM.Subject = txt_titulo.Text


 


        'Corpo


        objMM.Body = txt_corpo.Text


 


Existem ainda outras propriedades do nosso objecto de e-mail que não escrevemos nas textboxes, vamos começar com o remetente. :)


 


Ao usarmos o método From podemos atribuir o e-mail do remetente:


 


        'email do admin


        objMM.From = "admin@toto.net"


           


Podemos também definir em que formato queremos o e-mail, em texto simples ou html e qual a prioridade.


 


Não nos podemos esquecer do servidor de SMTP, este é usado para juntamente com a vossa conta de e-mail (remetente) enviar a mensagem.


 


                    'formato do email - texto ou html


        objMM.BodyFormat = MailFormat.Text


 


        'prioridade -> High, Low, Normal


        objMM.Priority = MailPriority.Normal


 


        'Smtp Server -> ver web.config


        SmtpMail.SmtpServer = "mail.netcabo.pt"


 


Por fim, o método Send envia a vossa mensagem de e-mail, se tudo correr bem.


 


      'Send method smtpMail class


      SmtpMail.Send(objMM)


 


Por favor reparem que eu não verifiquei por erros por parte de quem escreve o formulário, isso fica para voçês. ;)


 



 


Exemplo 2) Enviar mail cada vez que ocorre um erro


 


Só testei isto na framework 1.1, basta abrirem o ficheiro Global.asax.vb e no colocar o seguinte código na função Application_Error, não se esqueçam de importar a classe system.web.mail.


 


Imports System.Web.Mail


 


Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)


        '' fires when an error occurs


        Dim message As String = "<font face=verdana color=red>" _


                                      & "<h4>" & Request.Url.ToString() & "</h4>" _


                                      & "<pre><font color=red>" & Server.GetLastError().ToString() & "</pre>" _


                                      & "</font>"


 


       


        Response.Write("Ocorreu um erro grave, o nosso laxismo não nos permite corrigir mas vamos arquivar um papel com o acontecimento.")


 


        Dim mail As New MailMessage


        mail.From = "toto@somostodos.net"


        mail.To = "admin@somostodos.net"


        mail.Cc = "admin2@naochateies.net"


        mail.Subject = "Site XPTO: Outro Erro"


        mail.Body = message


        mail.BodyFormat = MailFormat.Html


        SmtpMail.SmtpServer = "mail.toto.pt"


        SmtpMail.Send(mail)


 


        Server.ClearError()


    End Sub


 


Assim, qualquer exception não tratada será reportada por e-mail a quem voçes quiserem, podemos também redireccionar o utilizador para outra página onde se trata os erros. Nota: estamos a tratar os erros a nível da aplicação se for desejável podemos também tratar página a página criando uma função do tipo:


 


Sub Page_Error(sender As Object, e As EventArgs)


       


End Sub


 


O fim. Por hoje é tudo, desculpem lá se está um pouco trapalhão.


Se tiverem alguma dúvida, sugestão, ameaça ou dinheiro que queiram deitar fora não hesitem em me contactar.


 


Pedro Sousa


http://pedro.thalassavii.net 


Written By: labreu
Date Posted: 4/14/2006
Number of Views: 977

Return