Imagine que você tem uma base de dados com um número muito grande de emails e precisa enviar um email para todos, seja para promoção, noticias etc, chamamos isso de newsletter,porém se nossa listagem contém muitos email, oalguns servidores pode sobrecarregar e as mensagens poderão não serem enviadas corretamente, ou até mesmo, nem serem enviadas.
Para isso usanod a paginação, para exibir os dados e enviarmos um numero “x” de email por vez, dando assim tempo para que o servidor possa enviar todos os emails corretamente.
Primeiro, precisaremos fazer a conexão com nosso banco para enviar nossos emails
Para fazer a conexão iremos usar o código abaixo:
<% '----------------------<br />' este arq. serve para estabelecer a conexao com o BD em Access<br /><br />sub abreconexao<br />constring="provider=microsoft.JET.OLEDB.4.0;Data Source=" & Server.MapPath("db/teste.mdb")<br />Set conexao=Server.CreateObject("ADODB.Connection")<br />conexao.open constring<br />end sub<br /><br />sub fechaconexao<br />set conexao=nothing<br />end sub<br />%>Onde no código de envio utilizamos ele através de um include file,
que com ele podemos inserir o conteúdo de um arquivo ASP em outro servidor antes de o arquivo ASP executa-lo, com a directiva # include.A directiva # include é usado para criar funções, cabeçalhos, rodapés, ou elementos que serão reutilizados em várias páginas.Ou seja, dessa forma não precisamos sempre ficar repetindo o código de conexão.
Abaixo o código, todo comentado, lembramos que, podemos utilizar qualquer outro coponente para envio de email, você pode verificar isso direto em seu host, para saber qual esta disponível. Você pode antes ter uma validação de usuário, para ver quem poderá enviar os emails, esta parte você pode também ver em nossos artigos um sistema de login, pois neste artigo não abordamos o login, mas é só implementá-lo junto com este código.
<!--#include file="conexao.asp"--> <br /><% <br />varNome = Session("Login") <br />' aqui verificamos se o user esta logado, você pode , fazer essa<br />' implementação apartir de seu sistema de login<br />if varNome = "" then <br />response.redirect("checerro.asp") <br />' checerro é um arquivo para fazer a verifição se o nome estiver vazio<br />' dai redireciona, para a página e será exibido uma mensagem de erro adquada.<br />end if<br /><br />dim conexao <br />Call abre_conexao<br /><br />' recupera as variáveis para enviar os e-mails <br />'Lembrando que antes de fazer o envio, eu fiz um formulário para a <br />'pessoa poder escolher por qual filtro ele quer filtrar os e-mails <br />'E também fiz com que ele pudesse escolher o arquivo a ser enviado <br />'Isso utilizando o Componente de Upload ASpUpload.<br /><br />assunto = request.form("assunto") <br />validade = request.form("validade") <br />empresa = request.form("empresa") <br />arquivo = request.form("arquivo") <br />str = request.form("str") <br />sql = request.form("sql") <br />' Como a pausa é feita por paginação, pag é a variavel que vai dizer em qual loop está agora<br /><br />pag = request.form("pag") <br />if pag = "" then <br />pag = 1 <br />end if <br />per = request.form("per") <br />CodigoCampanha = request.form("CodigoCampanha") <br />' reg é o nuemro de e-mails que ele irá enviar por bloco. <br />reg = 400<br /><br />'Isto le o arquivo no qual foi feito o Upload <br />' strpatha é um path fixo que eu tenho na pagina de include.(para facilitar o código) <br />Set Objeto = CreateObject ("Scripting.FileSystemObject") <br />set GV = Objeto.OpenTextFile(strpath &arquivo,1,true,false) <br />HTML = GV.ReadAll <br />GV.close <br />Set Objeto = nothing <br />lista = Replace(lista," ","")<br /><br />HTML = HTML <br />HTML2 = HTML<br /><br />' A var sql, contem a SQL para de acordo com o filtro que a pessoa escolheu <br />if sql <> "" then<br /><br />' Aqui eu pego quantos e-mails seram enviados<br /><br />sqlCont = "Select Count(Email) as Cont From Emails where ("&str&") and (Ativo = true)" <br />Set rsCont = conexao.execute(sqlCont) <br />NumReg = rsCont("Cont") <br />' Aqui iremos determinas qual é o numero maximo de blocos <br />Maxpag = int(Cint(NumReg)/ Cint(reg))+1 <br />Set rsCont = nothing<br /><br />' Testamos se irá ter somente um bloco, se sim iremos enviar todos os e-mails de uma vez<br /><br />if Cint(NumReg) <= Cint(reg) then <br />Set rs = conexao.execute(sql)<br /><br />Set rsMax = Server.CreateObject("ADODB.Recordset") <br />rsMax.Open "Select Max(CodigoCampanha) As max_cod From Campanhas", conexao <br />If IsNull(rsMax("max_cod")) Then <br />CodigoCampanha = 100 <br />Else <br />CodigoCampanha = rsMax("max_cod") + 1 <br />End If <br />rsMax.Close <br />Set rsMax = Nothing<br /><br />validade = date + CInt(validade) <br />sqlCampanha = "Insert Into Campanhas(CodigoCampanha,CodigoEmpresa,Assunto,Arquivo,Data,Validade) Values ("&CodigoCampanha&", "&empresa&", '"&assunto&"', '"&arquivo&"', '"&Now()&"','"&validade&"')" <br />Set rsCampanha = conexao.execute(sqlCampanha) <br />contador = 0 <br />contador2 = 1 <br />per = 1 <br />per2 = 1 <br />%> <br /><script language="JavaScript"> <br />window.open('enviando.asp','enviando','width=350 height=200 status=yes'); <br /></script> <br /><% <br />while not rs.eof <br />per = (100 * Cint(contador2))/Cint(NumReg) + 1<br /><br />if Int(per) > Int(per2) then <br />per2 = per <br />%> <br /><script> <br />window.open('javascript:conta(<%=Int(per)%>,<%=Int(contador2)%>);','enviando','width=350 height=200 status=yes'); <br /></script> <br /><% <br />end if <br />%> <br /><%<br /><br />HTML = HTML2 <br />sqlTestEnv = "Select Email From Enviados where CodigoCampanha = "&CodigoCampanha&" and Email = '"&rs("Email")&"'" <br />Set rsTestEnv = conexao.execute(sqlTestEnv) <br />if rsTestEnv.EOF then <br />aux = rs("Fantasia") <br />If InStr(aux, " ") > 0 Then <br />aux = Left(aux, InStr(aux, " ")-1 ) <br />End If <br />Empresa = UCase(aux)<br /><br />HTML = replace(HTML,"#Nome#",rs("Nome")) <br />HTML = replace(HTML,"#CodigoCampanha#",CodigoCampanha) <br />HTML = replace(HTML,"#Email#",rs("Email")) <br />HTML = replace(HTML,"#Empresa#",Empresa)<br /><br />response.write HTML <br />assunto2 = replace(assunto,"#Nome#",rs("Nome"))<br /><br />Dim myMail <br />Set myMail = CreateObject("CDONTS.NewMail") <br />myMail.From = "teste@teste.com"<br />myMail.To = rs("Email") <br />myMail.Subject = assunto2 <br />myMail.BodyFormat = 0 <br />myMail.MailFormat = 0 <br />myMail.Body = HTML <br />myMail.Send <br />contador = contador +1 <br />contador2 = Cint(contador2) +1 <br />Set myMail = Nothing<br /><br />sqlEnviados = "Insert Into Enviados(CodigoCampanha,Email,Nome,Cargo,Fantasia,Telefone,Data) Values ("&CodigoCampanha&",'"&rs("Email")&"','"&rs("Nome")&"','"&rs("Cargo")&"','"&rs("Fantasia")&"','"&rs("Telefone")&"','"&Now()&"')" <br />Set rsEnviados = conexao.execute(sqlEnviados) <br />end if <br />rs.MoveNext <br />wend <br />fim = true <br />else<br /><br />' se tivermos mais de um bloco iremos ter que fazer a paginação<br /><br />Set rs = conexao.execute(sql) <br />' Aqui inserimos na tabela Campanha os dados da mesma, só inserimos uma vez. <br />'É por isso que tomos este if, pois a 1ª vez o Codigo será branco. <br />if CodigoCampanha = "" then <br />Set rsMax = Server.CreateObject("ADODB.Recordset") <br />rsMax.Open "Select Max(CodigoCampanha) As max_cod From Campanhas", conexao <br />If IsNull(rsMax("max_cod")) Then <br />CodigoCampanha = 100 <br />Else <br />CodigoCampanha = rsMax("max_cod") + 1 <br />End If <br />rsMax.Close <br />Set rsMax = Nothing<br /><br />validade = date + CInt(validade) <br />sqlCampanha = "Insert Into Campanhas(CodigoCampanha,CodigoEmpresa,Assunto,Arquivo,Data,Validade) Values ("&CodigoCampanha&", "&empresa&", '"&assunto&"', '"&arquivo&"', '"&Now()&"','"&validade&"')" <br />Set rsCampanha = conexao.execute(sqlCampanha) <br />end if <br />' aqui contador é o que vale a quantidade de e-mails que esta sendo enviado e-mails <br />' contador 2 é um contador auxiliar para abrirmos uma pag de porcetagem do envio <br />contador = ((Cint(pag) -1) * Cint(reg)) + 0 <br />contador2 = ((Cint(pag) -1) * Cint(reg)) + 1 <br />//per = 1 <br />//per2 = 1 <br />%> <br />' aqui testamos se é primeira vez que executamos a página, se sim iremos abrir a pag de porcentagem <br /><% <br />if Cint(pag) = 1 then <br />%> <br /><script language="JavaScript"> <br />window.open('enviando.asp','enviando','width=350 height=200 status=yes'); <br /></script> <br /><% <br />end if <br />%> <br />' Aqui testamos se é a primeira vez que executamos a página, se não for nos iremos ter que passar para os próximos 400 registros da tabela <br /><% <br />NumReg2 = Cint(reg) * (Cint(pag)-1) <br />If NumReg2 > 0 then <br />For LinkTemp = 1 to NumReg2 <br />if rs.Eof = False then <br />rs.MoveNext <br />end if <br />Next <br />end if<br /><br />regatual = 1 <br />' aqui fazemos o loop da tabela de e-mails <br />while not rs.eof and regatual <= Cint(reg) <br />' per é uma variavel que ´rá ser envia para a página de porcentagem para mmostrar o andamento do envio<br /><br />per = (100 * Cint(contador2))/Cint(NumReg) + 1<br /><br />if Int(per) > Int(per2) then <br />per2 = per <br />%><br /><br />' este script atualiza a pagina de porcentagem sempre que novos e-mails são enviados <br /><script> <br />window.open('javascript:conta(<%=Int(per)%>,<%=Int(contador2)%>);','enviando','width=350 height=200 status=yes'); <br /></script> <br /><% <br />end if <br />%> <br /><% <br />' Aqui fazemos uns replaces no arquivo (HTML) que foi feito o Upload. <br />'Isto é para podermos personalizar os e-mails <br />HTML = HTML2 <br />sqlTestEnv = "Select Email From Enviados where CodigoCampanha = "&CodigoCampanha&" and Email = '"&rs("Email")&"'" <br />Set rsTestEnv = conexao.execute(sqlTestEnv) <br />if rsTestEnv.EOF then <br />aux = rs("Fantasia") <br />If InStr(aux, " ") > 0 Then <br />aux = Left(aux, InStr(aux, " ")-1 ) <br />End If <br />Empresa = UCase(aux)<br /><br />HTML = replace(HTML,"#Nome#",rs("Nome")) <br />HTML = replace(HTML,"#CodigoCampanha#",CodigoCampanha) <br />HTML = replace(HTML,"#Email#",rs("Email")) <br />HTML = replace(HTML,"#Empresa#",Empresa)<br /><br />response.write HTML <br />assunto2 = replace(assunto,"#Nome#",rs("Nome")) <br />' Aqui estamos enviando os e-mails em formato HTML<br /><br />Dim myMail2 <br />Set myMail2 = CreateObject("CDONTS.NewMail") <br />myMail2.From = "teste@teste.com.br" <br />myMail2.To = rs("Email") <br />myMail2.Subject = assunto2 <br />myMail2.BodyFormat = 0 <br />myMail2.MailFormat = 0 <br />myMail2.Body = HTML <br />myMail2.Send <br />regatual = regatual + 1 <br />contador = Cint(contador) +1 <br />contador2 = Cint(contador2) +1 <br />Set myMail2 = Nothing <br />' Aqui gravamos em outra tablela todos os e-mails que para onde foram enviados. Para relatórios<br /><br /><br />sqlEnviados = "Insert Into Enviados(CodigoCampanha,Email,Nome,Cargo,Fantasia,Telefone,Data) Values ("&CodigoCampanha&",'"&rs("Email")&"','"&rs("Nome")&"','"&rs("Cargo")&"','"&rs("Fantasia")&"','"&rs("Telefone")&"','"&Now()&"')" <br />Set rsEnviados = conexao.execute(sqlEnviados) <br />end if <br />rs.MoveNext <br />wend <br />end if <br />'Testamos se é o ultimo loop, se sim iremos mostrar direto quantos e-mails foi enviado <br />if (Cint(pag) >= Cint(Maxpag)) then <br />fim = true <br />else<br /><br />' Se naõ iremos fazer fim = falso para passarmos para o próximo bloco de e-mails após um tempo <br />fim = false <br />pag = Cint(pag) + 1 <br />end if <br />end if <br />%> <br /><% <br />' Aqui testamos se chegou ao fim ou n~~ao, se não chegou ainda <br />'iremos fazer um formulário com todos os dados que teremos que ter <br />' iremos fazer um script para enviar este formulário novamente após um tempo <br />if fim = false then <br />%> <br /><HTML> <br /><HEAD> <br /><Title></Title> <br /><script> <br />function Envia() <br />{ <br />document.form.submit(); <br />}<br /><br />setTimeout("Envia();",120000);<br /><br /></script> <br /></HEAD> <br /><BODY> <br /><form name="form" method="post" action="camp3.asp"> <br /><input type="hidden" name="sql" value="<%=sql%>"> <br /><input type="hidden" name="assunto" value="<%=assunto%>"> <br /><input type="hidden" name="arquivo" value="<%=arquivo%>"> <br /><input type="hidden" name="empresa" value="<%=empresa%>"> <br /><input type="hidden" name="str" value="<%=str%>"> <br /><input type="hidden" name="pag" value="<%=pag%>"> <br /><input type="hidden" name="codigocampanha" value="<%=CodigoCampanha%>"> <br /><input type="hidden" name="per" value="<%=per%>"> <br /></form> <br /></BODY> <br /></HTML> <br /><% <br />else <br />' Se chegou ao fim iremos mostrar a quantidade de e-mails que foi gerada <br />%> <br /><html> <br /><head> <br /><title>Email´s</title> <br /><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <br /></head><br /><br /><body bgcolor="#FFFFFF" text="#000000"> <br /><table width="100%" border="0" cellspacing="0" cellpadding="0"> <br /><tr> <br /><td> <br /><div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b>CONFIRMAÇÃO <br />DO CADASTRO DE CAMPANHA</b></font></div> <br /></td> <br /></tr> <br /><tr> <br /><td> </td> <br /></tr> <br /><tr> <br /><td> </td> <br /></tr> <br /><tr> <br /><td> <br /><table width="70%" border="0" cellspacing="0" cellpadding="0" align="center"> <br /><% <br />if Cint(contador) > 0 then<br /><br />sqlEmp = "Select * From Empresas where CodigoEmpresa = "&empresa&"" <br />Set rsEmp = conexao.execute(sqlEmp)<br /><br />msgBody = "<HTML>" & vbcrlf <br />msgBody = msgBody & "<body>" & vbcrlf <br />msgBody = msgBody & "Olá " & rsEmp("Nome") &",<br><br>" & vbcrlf <br />msgBody = msgBody & "A campanha com assunto : " & assunto &"<br>" & vbcrlf <br />msgBody = msgBody & "Foi disparada para "&contador&" email(s) de sua lista de e-mails.<br><br>" & vbcrlf <br />msgBody = msgBody & "Verifique logo abaixo o corpo do e-mail que foi disparado: <br><br> " & vbcrlf <br />msgBody = msgBody & HTML2 & vbcrlf <br />msgBody = msgBody & "</body>" & vbcrlf <br />msgBody = msgBody & "</HTML>" & vbcrlf<br /><br />'response.write msgBody<br /><br />Dim myMail3 <br />Set myMail3 = CreateObject("CDONTS.NewMail") <br />myMail3.From = "teste@teste.co<br />myMail3.To = "xan@xan.com.br"'rsEmp("Email") <br />myMail3.Subject = "Comprovande do envio da campanha de Web Marketing: """ & assunto &"""" <br />myMail3.BodyFormat = 0 <br />myMail3.MailFormat = 0 <br />myMail3.Body = HTML2 <br />myMail3.Send <br />Set myMail3 = Nothing<br /><br />%> <br /><tr> <br /><td> <br /><table width="100%" border="0" cellspacing="1" cellpadding="0" bgcolor="#333333"> <br /><tr> <br /><td bgcolor="#DDFFEE"><br /><br /><div align="center"><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><br> <br /><br> <br />Campanha enviada com sucesso para<br> <br /><%=Contador & " "%> emil(s).<br> <br /><br> <br /></font></div> <br /></td> <br /></tr> <br /></table> <br /></td> <br /></tr> <br /><% <br />else <br />%> <br /><tr> <br /><td><br /><br /><table width="100%" border="0" cellspacing="1" cellpadding="0" bgcolor="#333333"> <br /><tr> <br /><td bgcolor="#DDFFEE"> <br /><div align="center"><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><br> <br /></font><font size="4"><font face="Verdana, Arial, Helvetica, sans-serif"><br> <br /><font size="3">HÁ ALGUM CAMPO OBRIGATÓRI EM <br />BRANCO<br> <br />POR FAVOR REALIZE A OPERAÇÃO<br> <br />NOVAMENTE!! </font></font></font><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><br> <br /><br> <br /></font></div> <br /></td> <br /></tr> <br /></table> <br /></td> <br /></tr> <br /><% <br />end if <br />%> <br /></table> <br /></td> <br /></tr> <br /></table> <br /><br> <br /><br> <br /><table width="94%" border="0" cellspacing="0" cellpadding="0" align="center"> <br /><tr> <br /><td width="50%" height="13"> <br /><div align="center"><a href="camp.asp"><font color="#003300" size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><font color="#000000"><< <br />Voltar </font></b></font></a> </div> <br /></td> <br /><td width="50%" height="13"> <br /><div align="center"><a href="checlogin2.asp"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b><font size="2"><< <br />Voltar ao Menu Inicial</font></b></font></a></div> <br /></td> <br /></tr> <br /></table> <br /></body> <br /></html> <br /><% <br />end if <br />%> <br /><% <br />Call fecha_conexao <br />Set rs = Nothing <br />%>





