Classe Para Enviar Email Usando Cdosys
Olá pessoal, neste artigo irei mostrar um modo prático para enviar e-mails através do seu site usando Classe do ASP e seus métodos e propriedades,
Em alguns casos, no site precisamos inserir um formulário para enviar algum tipo de E-mails como contato, indicação do site e etc. A maioria das pessoas costuma criar funções do objeto e-mail para facilitar, mas só isso não basta, quando enviamos uma mensagem no formato html também temos que criar a estrutura do corpo do e-mail acaba sendo trabalhoso escrever o html do corpo do E-mail dentro da programação.
Pensando nisso resolvi criar uma classe para enviar esses tipos de E-mails usando um modelo de arquivo html externo, ou seja, sem precisarmos escrever e formata-lo dentro do escopo da programação,
Teremos 4 arquivos. - cls_email.asp (nossa classe que recebe as propriedades do e-mail). - envia_email.asp (arquivo para enviar a mensagem). - form.html (formulário para captar as informações a serem transmitidas). - html_contato.html (modelo html simples que será corpo da mensagem).
Primeiro passo será criar um arquivo html modelo com as informações do corpo da mensagem, neste exemplo irá utilizar os dados: Nome, Telefone e Mensagem, que será as variáveis que serão substituídas pelos valores vindos do formulário.
html_contato.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>HTML Contato</title>
<style type="text/css" media="screen">
body { font:11px "trebuchet MS", Arial, helveitica, sans-serif; }
h2 { font:bold 18px "trebuchet MS", Arial, helveitica, sans-serif }
</style>
</head>
<body>
<div id="conteudo">
<h2>Classe para enviar de Email usando CDOSYS FORMATO HTML</h2>
<p>Neste arquivo crie quantas variáveis que você achar necessário. dentro das chaves </p>
<p>Lembrando que, ao criar as nomenclaturas neste html ref. as variáveis não esqueça </p>
<p>
Nome: <br />
Tel: <br />
Mensagem <br />
</p>
</div>
</body>
</html>
Segundo passo será criar o formulário abaixo para envio das informações.
form.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formulario Envio de E-mail.</title>
</head>
<body>
<div id="principal">
<form id="frmMail" action="envia_email.asp" method="post">
<fieldset>
<legend>Formulario de Contato</legend>
<label>Nome: <input type="text" name="NOME" id="NOME" /></label>
<label>E-mail: <input type="text" name="EMAIL" id="EMAIL" /></label>
<label>Telefone: <input type="text" name="TEL" id="TEL" /></label>
<label>Mensagem: <textarea name="MENSAGEM" id="MENSAGEM" cols="" rows=""></textarea></label>
<label><input type="submit" id="bto" value=" ENVIAR " /></label>
</fieldset>
</form>
</div>
</body>
</html>
Terceiro passo será criar o arquivo cls_email.asp
e configurar o servidor smtp de saída de e-mails.
cls_email.asp
<%
Class clsEmail
' DEFINIÇÃO DAS VARIAVES DO OBJ EMAIL
Private sDE ' REMETENTE
Private sPARA ' DESTINATARIO
Private sASSUNTO' ASSUNTO DA MENSAGEM
Private sCORPO ' CORPO DA MENSAGEM
Private oConfig ' oConfig SERÁ OS ELEMENTOS QUE IREMOS ADICIONAR A CADA FORMULARIO
Public Sub ClassInitialize()
Set oConfig = Server.CreateObject("Scripting.Dictionary")
End Sub
Public Sub ClassTerminate()
oConfig.RemoveAll
Set oConfig = Nothing
End Sub
Public Property Let DE(valueDE)
sDE = valueDE
End Property
Public Property Let PARA(valuePARA)
sPARA = valuePARA
End Property
Public Property Let ASSUNTO(valueASSUNTO)
sASSUNTO = valueASSUNTO
End Property
Public Property Let CORPO(valueCORPO)
sCORPO = valueCORPO
End Property
Public Property Let Config(sKey, sValue)
oConfig.Add sKey, sValue
End Property
' ESTA SUB ROTINA UTILIZAMOS PARA TESTAR O CORPO DO EMAIL.
' ASSIM NÃO PRECIMOS FICAR ENCHENDO NOSSA CAIXA DE MSG COM MENSAGENS DE TESTE
' OU ATÉ MESMO TESTAR OFF-LINE.
Public Sub testa()
Response.Write CorpoEmail
End Sub
' NESTA FUNÇÃO FAZEMOS A LEITURA DA ESTRUTURA DO AQUIVO HTML E SUBSTITUIMOS AS VARIAVEIS.
Public Function CorpoEmail()
Dim oFSO, oFile, sHtml
Set oFSO = Server.CreateObject("Scripting.FileSystemObject")
Set oFile = oFSO.OpenTextFile(Server.MapPath(sCORPO),1,False)
sHtml = oFile.ReadAll
Set oFSO = Nothing
Set oFile = Nothing
Dim oRE, sKey
' EXPRESSÃO REGULAR PARA SUBSTITUIR DAS VARIAVEIS
Set oRE = New RegExp
oRE.IgnoreCase = TRUE
oRE.Global = TRUE
' SUBSTITUIMOS TODAS AS CHAVES CRIADAS NO ARQUIVO HTML
For Each sKey In oConfig
oRE.Pattern = sKey
oRE.Replace(sHtml,oConfig(sKey))
Next
CorpoEmail = sHtml
End Function
'ENVAR EMAIL
Public Sub SendMail()
Dim objMail, objMailConfig
Set objMail = Server.CreateObject("CDO.Message")
Set objMailConfig = Server.CreateObject("CDO.Configuration")
objMailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.seudominio.com.br"
objMailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMailConfig.Fields.Update
Set objMail.Configuration = objMailConfig
objMail.From = sDE
objMail.TO = sPARA
objMail.Subject = sASSUNTO
objMail.HTMLBody = CorpoEmail
objMail.Send()
Set objMail = Nothing
End Sub
End Class
%>
Logo após criamos o arquivo para enviar a mensagem.
envia_email.asp
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="clsemail.asp" -->
<%
Response.Expires = 0
Response.ExpiresAbsolute = now()
'CRIANDO A INSTANCIA DO OBJ EMAIL
Dim oMail
Set oMail = New clsEmail
' ATRIBUIMOS A PROPRIEDADE REMETENTE
oMail.DE = LCase(Request.Form("EMAIL"))
' ATRIBUIMOS A PROPRIEDADE DESTINATARIO
oMail.PARA = "seuemail@seudominio.com.br"
' ATRIBUIMOS A PROPRIEDADE ASSUNTO
oMail.ASSUNTO = "CONTATO"
' ATRIBUIMOS A PROPRIEDADE CORPO DO EMAIL (INDICAMOS O CAMINHO RELATIVO DO ARQUIVO HTML )
oMail.CORPO = "htmlcontato.html"
' CRIAMOS O ARRAY ONDE ATRIBUIMOS AS VARIAVEIS DE SUBSTITUIÇÂO DO CORPO DO EMAIL.
oMail.Config("NOME") = Trim(Request.Form("NOME"))
oMail.Config("TEL") = Trim(Request.Form("TEL"))
oMail.Config("MSG") = Server.HTMLEncode(Request.Form("MENSAGEM"))
' ENVIAMOS O E-MAIL.
oMail.SendMail()
' CHAMAMOS A FUNÇÃO TESTA PARA SABER ESTAMOS ENVIANDO CORRETAMENTE A MENSAGEM.
oMail.testa
Set oMail = Nothing
With Response
.Write "<h5>Seu Email foi enviado com sucesso!</h5>"
End With
%>
Definimos a classe do objeto e-mail e atribuímos seus valores padrões o Remetente, Destinatário, Assunto e o Corpo (quer será o caminho relativo do arquivo modelo html_contato.html) Adicionamos o array com as variáveis de substituição.