ASP.NET 2.0 - Enviando Emails
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 :
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:
Para enviar um e-mail de uma página ASP.NET 2.0 siga o roteiro:
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 |
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:
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()
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"))
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.
Assuntos relacionados a serem abordados em artigos futuros:
Pegue o projeto completo aqui: enviaEmail2.zip
Eu sei é apenas ASP.NET , mas eu gosto...
José Carlos Macoratti