ASP - Usando O componente AspEmail


No artigo - Emails , emails , emails... - eu abordei como usar o componente ASPMail no Visual Basic (ainda não conclui o artigo...), vamos agora aprender a implementar uma funcionalidade fundamental em nossas aplicações ASP . Veremos com enviar um e-mail a partir de uma aplicação ASP.

A ASP não prove esta funcionalidade , ou seja , não existe em ASP um objeto que podemos utilizar para enviar e-mails. Teremos que usar um componente de terceiros que forneça esta funcionalidade e preencha esta lacuna. Na verdade esta é mais uma das facilidades que temos ao usar ASP , se precisamos realizar alguma tarefa que em ASP é impossível podemos obter ou até mesmo construir um componente e usá-lo com ASP.

O que torna isto possível é a arquitetura COM – Component Object Model . Podemos então escrever um componente usando C++ ou Visual Basic , etc.., e usá-lo com ASP para agregar mais funções a linguagem.

Para suprir a nossa necessidade de enviar um e-mail com ASP vamos usar o componente Aspemail , ele é gratuíto e pode ser encontrado em www.aspemail.com . Após fazer o download basta instalá-lo em nosso servidor Web. A função do componente Aspemail será basicamente se conectar a um servidor SMTP (Simple Mail Transfer Protocol) e solicitar o envio de um e-mail.

Para instalar o componente basta clicar duas vezes sobre o arquivo aspemail seguir as orientações durante a instalação e a seguir registrar o arquivo aspemail.dll usando o arquivo regsvr32.exe que esta presente no diretório c:\windows\system do windows. Basta digitar em iniciar=>executar , a seguinte linha: regsvr32 c:\aspemail\bin\aspemail.dll (supondo que você tenha instalado o componente em c:\aspemail)

Descrevendo o componente AspEmail

Para usar o componente Aspemail instalado em nossas aplicações ASP devemos criar uma instância do objeto AspEmail em nosso script , isto é feito da seguinte forma:

<%
...
Set Mail = Server.CreateObject("Persits.MailSender")
...
%>

A instrução acima cria uma variável objeto do tipo Aspemail que possui propriedades que podemos usar para enviar um e-mail através de um servidor SMTP. As principais propriedades usadas para o envio de um e-mail são:

Exemplo: Mail.Host = "smtp.mycompany.com"

Podemos usar uma relação de servidores separados por ponto e vírgula (;) , se o primeiro falhar o componente irá tentar usar o segundo e assim por diante:
Exemplo:

Mail.Host ="smtp.mycompany.com;smtp2.mycompany.com;host.company.com"

Exemplo: Mail.From = "vendas@mycompany.com"

Exemplo: Mail.FromName = "JcmSoft Software"

Exemplo: Mail.AddAddress "jsmith@company1.com", "John Smith"

Exemplo: Mail.Subject = "Este é o titulo da mensagem"

Exemplo:

Mail.Body = "Querida Jessica:" & chr(13) & chr(10) & "Obrigado pelos bons negócios . Seu gerente de vendas"

Ou no formato HTML

Mail.Body = "<HTML><BODY BGCOLOR=#0000FF>Querida Janice:....</BODY></HTML>"
Mail.IsHTML = True

Exemplo:

On Error Resume Next
Mail.Send
If Err <> 0 Then
Response.Write "Ocorreu o seguinte erro: " & Err.Description
End If

Exemplo: Mail.AddAttachment "c:\dir\arquivo.doc"

Usando o componente AspEmail

Vamos mostrar como usar o componente para enviar um e-mail a partir de nosso script ASP. Em muitos sites na Web existe um recurso que torna possível ao usuário recomendar o site que esta visitando ou enviar algum texto do site a um amigo. Isto funciona como propaganda para o site e é fácil de ser implementado.

Um exemplo do uso deste recurso esta no site da UOL . Ao ler uma notícia você pode enviá-la a alguém por e-mail com um clique de mouse . Veja a seguir:

Ao clicar no ícone com o texto "Mande este texto por e-mail" , surge um formulário onde o usuário informa os dados para o envio do texto anexo ao e-mail. Veja abaixo:

Para implementar tal recurso em seus scripts ASP , basta usar um formulário para coletar os dados referente ao ao texto do e-mail que deverá ser enviado e usar o componente AspEmail para enviar o e-mail.

Nosso exemplo será composto de um único arquivo: Envia_Email.asp

O código do arquivo Envia_Email.asp é dado a seguir:

<H3>Enviando um e-mail com o componente AspEmail</H3>

<%

Dim Mail ' objeto Email

Dim strFromName ' nome do remetente

Dim strFromEmail ' endereço de Email do remetente

Dim strToEmail ' endereço do destinatario

Dim strSubject, strBody 'corpo da mensagem

Dim strThisPage ' o endereco do seu site

Dim strReferringPage ' a referencia URL

Dim bValidInput ' variável Booleana usada na validação

Dim strhost ' nome do servidor

' Retorna o nome do arquivo de script e a url da pagina

strThisPage = Request.ServerVariables("SCRIPT_NAME")

strReferringPage = Request.ServerVariables("HTTP_REFERER")

'define os valores iniciais dos parametros usados em nossa mensagem

strhost = "mail.riopreto.com.br" ‘altere o nome para o seu servidor de mensagens

strFromName = Trim(Request.Form("txtFromName"))

strFromEmail = Trim(Request.Form("txtFromEmail"))

strToEmail = Trim(Request.Form("txtToEmail"))

strSubject = "Site sobre Visual Basic"

strBody = Trim(Request.Form("txtMessage"))

'monta o corpo da mensagem

strBody = ""

strBody = strBody & "Achei um site que tem tudo sobre Visual Basic , dê uma olha em :" & vbCrLf

strBody = strBody & vbCrLf

strBody = strBody & " http://www.geocities.com/SiliconValley/Bay/3994 " & vbCrLf

' validacao dos dados

bValida_Entrada = True

bValida_Entrada = bValida_Entrada And strFromName <> ""

bValida_Entrada = bValida_Entrada And Valida_Email(strFromEmail)

bValida_Entrada = bValida_Entrada And Valida_Email(strToEmail)

'Se o e-mail é valido envia a mensagem

If bValida_Entrada Then

Set Mail = Server.CreateObject("Persits.MailSender")

Mail.Host = strHost

Mail.From = strFromEmail

Mail.FromName = strFromName

Mail.AddAddress strToEmail

Mail.Subject = strSubject

Mail.Body = strBody

on error resume next

Mail.Send

mensagem_erro = ""

if err <> 0 then

mensagem_erro = "Ocorreu o seguinte erro durante o envio do e-mail: " & Err.description

end if

Set Mail = Nothing

on error goto 0

' exibe mensagem de agradecimento

%>

<P><b>Sua mensagem foi enviada. Obrigado por ter visitado nosso site , volte sempre !</P></b>

<%

Else

If "http://" & Request.ServerVariables("HTTP_HOST") & strThisPage = strReferringPage Then

Response.Write "Ocorreu um erro . Verifique suas informações: " & "<BR>" & vbCrLf

End If

' exibe o formulario...

Exibe_Formulario strThisPage, strFromName, strFromEmail, strToEmail, strBody

End If

%>

<%

'verifica se o e-mail é valido

Function Valida_Email(strEmail)

Dim bIsValid

bIsValid = True

If Len(strEmail) < 5 Then

bIsValid = False

Else

If Instr(1, strEmail, " ") <> 0 Then

bIsValid = False

Else

If InStr(1, strEmail, "@", 1) < 2 Then

bIsValid = False

Else

If InStrRev(strEmail, ".") < InStr(1, strEmail, "@", 1) + 2 Then

bIsValid = False

End If

End If

End If

End If

Valida_Email = bIsValid

End Function

%>

<%

Sub Exibe_Formulario(strPageName, strFromName, strFromEmail, strToEmail, strBody)

%>

<html>

<body bgcolor=aqua>

<FORM ACTION="<%= strPageName %>" METHOD="post" name=frmReferral>

<TABLE BORDER="0">

<TR>

<TD VALIGN="top" ALIGN="right"><STRONG>Seu Nome:</STRONG></TD>

<TD><INPUT TYPE="text" NAME="txtFromName" VALUE="<%= strFromName %>" SIZE="30"></TD>

</TR>

<TR>

<TD VALIGN="top" ALIGN="right"><STRONG>E-mail do Remetente :</STRONG></TD>

<TD><INPUT TYPE="text" NAME="txtFromEmail" VALUE="<%= strFromEmail %>" SIZE="50"></TD>

</TR>

<TR>

<TD VALIGN="top" ALIGN="right"><STRONG>E-mail do destinatário:</STRONG></TD>

<TD><INPUT TYPE="text" NAME="txtToEmail" VALUE="<%= strToEmail %>" SIZE="50"></TD>

</TR>

<TR>

<TD VALIGN="top" ALIGN="right"><STRONG>Mensagem:</STRONG></TD>

<TD><TEXTAREA NAME="txtMessage" COLS="50" ROWS="5" WRAP="virtual" READONLY><%= strBody %></TEXTAREA></TR>

<TR>

<TD></TD>

<TD><INPUT TYPE="reset" VALUE="Limpar Formulário" name=rstReferral>&nbsp;&nbsp;<INPUT TYPE="submit" VALUE="Enviar E-mail" name=subReferral></TD>

</TR>

</TABLE>

</FORM>

</body>

</html>

<%

End Sub

%>

Vejamos os pontos principais do código acima:

a-) As variáveis definidas são preenchidas com os valores dos campos do formulário

strhost = "mail.riopreto.com.br" ‘altere o nome para o seu servidor de mensagens

strFromName = Trim(Request.Form("txtFromName"))

strFromEmail = Trim(Request.Form("txtFromEmail"))

strToEmail = Trim(Request.Form("txtToEmail"))

strSubject = "Site sobre Visual Basic"

strBody = Trim(Request.Form("txtMessage"))

b-) Se o e-mail for valido criamos uma instância do objeto Aspmail e definimos as propriedades do objeto necessárias para enviar o e-mail. Verificamos também se ocorreu algum erro , e se tudo deu certo enviamos o e-mail.

If bValida_Entrada Then

Set Mail = Server.CreateObject("Persits.MailSender")

Mail.Host = strHost

Mail.From = strFromEmail

Mail.FromName = strFromName

Mail.AddAddress strToEmail

Mail.Subject = strSubject

Mail.Body = strBody

on error resume next

Mail.Send

mensagem_erro = ""

if err <> 0 then

mensagem_erro = "Ocorreu o seguinte erro durante o envio do e-mail: " & Err.description

end if

c-) Exibe a mensagem de erro e mostra o formulário

If "http://" & Request.ServerVariables("HTTP_HOST") & strThisPage = strReferringPage Then

Response.Write "Ocorreu um erro . Verifique suas informações: " & "<BR>" & vbCrLf

End If

' exibe o formulario...

Exibe_Formulario strThisPage, strFromName, strFromEmail, strToEmail, strBody

d-) Função usada para validar o e-mail

Function Valida_Email(strEmail)

Dim bIsValid

bIsValid = True

If Len(strEmail) < 5 Then

bIsValid = False

Else

If Instr(1, strEmail, " ") <> 0 Then

bIsValid = False

Else

If InStr(1, strEmail, "@", 1) < 2 Then

bIsValid = False

Else

If InStrRev(strEmail, ".") < InStr(1, strEmail, "@", 1) + 2 Then

bIsValid = False

End If

End If

End If

End If

Valida_Email = bIsValid

End Function

O formulário gerado pelo código Envia_Email.asp e exibido a seguir:

2-) Na figura abaixo temos a mensagem informando que o e-mail foi enviado.

Deu para perceber que é muito fácil implementar o envio de e-mail em ASP . Assim ocorre com outros serviços que podemos agregar aos scripts ASP aumentando o seu poder.

Podemos usar os dados armazenados em um banco de dados – uma tabela de clientes – para enviar e-mails para nossos clientes a partir de um banco de dados. Pense nisto...


José Carlos Macoratti