Vamos neste artigo aprender a enviar email em massa utilizando o recurso de paginação.
Digamos que temos uma base de dados com inúmeros emails cadastrados, e precisamos enviar um email para todos. As chamadas newsletter. Quando essa lista conter muitos email e formos enviar a newsletter, o servidor pode sobrecarregar e as mensagens poderão não serem enviadas corretamente, ou até mesmo, nem serem enviadas. Portanto, iremos utilizar o recurso de paginação, muito usado para exibir dados de um banco de dados, para enviarmos um determinado numero de email por vez, dando assim tempo para que o servidor possa enviar todos os emails corretamente.
Veja abaixo o código completo, todo comentado:
<% Response.Buffer = True 'Declara as variaveis a serem usadas neste script Dim pagina_atual, total_paginas, ComandoSQL, objRS, objRS_atualiza, Conexao, status_envio 'Numero de registros por pagina (emails a serem enviados, neste caso, 10 por vez) Const registros_por_pagina = 10 'Verifica o numero da pagina de registros a ser consultada If Request.QueryString("pagina_atual") = "" Or Request.QueryString("pagina_atual") = "0" Then pagina_atual = 1 Else pagina_atual = Request("pagina_atual") End If 'Cria conexao com o banco de dados, informe corretamente o caminho do banco de dados Set Conexao = Server.CreateObject("ADODB.Connection") Conexao.Open "Data Source=d:\www\vhosts\superasp\superasp\web\email.mdb;Provider=Microsoft.Jet.OLEDB.4.0;" 'Captura o email dos registros da tabela pela ordem alfabética ComandoSQL = "SELECT email FROM tabela ORDER BY email ASC" Set objRS = Server.CreateObject("ADODB.Recordset") objRS.CursorLocation = 3 objRS.CursorType = 2 objRS.LockType = 1 objRS.CacheSize = registros_por_pagina objRS.Open ComandoSQL, Conexao,,, &H0001 objRS.PageSize = registros_por_pagina status = "" If Not objRS.EOF Then 'Informa o numero da pagina a ser utilizada objRS.AbsolutePage = pagina_atual
'Captura o numero total de paginas criadas total_paginas = objRS.PageCount
'Calcula o percentual de emails enviados até o momento status_envio = status_envio & Fix((pagina_atual*100)/total_paginas) & "% enviado<br>"
'Percorre todos os registros da pagina atual para capturar os email a serem enviados a newsletter For Cont = 1 to objRS.PageSize 'Para mensagem em HTML utilize sempre este bloco no inicio da mensagem a ser enviada Mensagem = "" Mensagem = Mensagem &"<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>" Mensagem = Mensagem & "<HTML><HEAD>" Mensagem = Mensagem & "<META content='text/html; charset=iso-8859-1' http-equiv=Content-Type>" Mensagem = Mensagem & "<META content='MSHTML 5.00.2614.3500' name=GENERATOR></HEAD>" Mensagem = Mensagem & "<BODY leftmargin=0 rightmargin=0 bottommargin=0 topmargin=0>" 'Informa a mensagem a ser enviada, neste caso, ela pode conter codigo HTML Mensagem = Mensagem & "<FONT face=Arial size=2>Ola,<br><b>Tudo bem contigo?</b></FONT>" 'Para mensagem em HTML utilize sempre este bloco no final da mensagem a ser enviada Mensagem = Mensagem & "</BOBY>" Mensagem = Mensagem & "</HTML>" 'Envia a mensagem para o email do registro atual Set ObjMail = Server.CreateObject("CDONTS.NewMail")
'Informa o email atual a ser enviado ObjMail.to = objRS("email")
'Informa o email do remetente, o titulo do email e outras configurações ObjMail.from = "seu_email@servidor.com.br" ObjMail.subject = "Novidades" ObjMail.Importance = 1 ObjMail.BodyFormat = 0 ObjMail.MailFormat = 0
'Informa o texto da mensagem ObjMail.body = Mensagem
'Envia o email ObjMail.send
'Elimina variavel da memória Set ObjMail = nothing 'Vai para o proximo registro da pagina objRS.MoveNext Next %> <html> <head> <title>Newsletter</title> </head> <body> <% If Int(pagina_atual) < Int(total_paginas) Then 'Informa o status do envio da newsletter Response.Write status_envio
'Codigo JavaScript para atualizar a pagina e enviar os proximos emails, neste caso, a cada 5 segundos %> <br>Aguarde o envio da newsletter... <SCRIPT LANGUAGE="JavaScript"> <!-- function atualiza(){ document.location.href = "<%=Request.ServerVariables("SCRIPT_NAME")%>?pagina_atual=<%=pagina_atual+1%>" } setTimeout("atualiza()",5000); //--> </SCRIPT> <% Else 'Informa que o envio da newsletter foi concluido %> Envio da Newsletter concluido. <% End If End If %> </body> </html> <% 'Fecha a conexao com o banco de dados objRS.Close Conexao.Close 'Elimina as variaveis da memória do servidor Set pagina_atual = Nothing Set total_paginas = Nothing Set ComandoSQL = Nothing Set objRS = Nothing Set objRS_atualiza = Nothing Set Conexao = Nothing Set status_envio = Nothing %> Não esqueça de informar corretamente os dados grifados na cor laranja. Espero que este exemplo lhe seja útil. Um grande abraço! Fabiano Dias fabiano@superasp.com.br
|